Перейти к публикации

radius to end of arc differs from radius


Рекомендованные сообщения



Меняю знаки в I и J ,получаю хорошую дугу. В вашем варианте дуги нет!

10.jpg

11.jpg

Ссылка на сообщение
Поделиться на других сайтах

спасибо, вроде смена знаков помогает. Но править это в 16000 строках долговато. есть какой нибудь вариант по проще? как это все автоматически исправить?

 

 

Изменено пользователем akzorbek
Ссылка на сообщение
Поделиться на других сайтах
Только что, akzorbek сказал:

спасибо, вроде смена знаков помогает. Но править это в 16000 строках долговато. есть какой нибудь вариант по проще? как это все автоматически исправить?

Попробуй этот пост если что шапку подправишь под Mach3 главное чтоб  для начала код  рабочий был! 

 
Ссылка на сообщение
Поделиться на других сайтах

Пока вышел из ситуации следующим образом. Написал програмульку, которая во всех кадрах, где есть круговая интерполяция, высчитывает радиусы и заменяет центр дуги на радиус. Вроде не ругается. Теперь попробую на станке.

Ссылка на сообщение
Поделиться на других сайтах

????? Как иногда шутят физики - "Предложите самый дорогой способ измерения постоянной Планка.."

Ссылка на сообщение
Поделиться на других сайтах

я программист 1С. Вот и написал простенький код. Конечно это танцы с бобунами. Но это, как у нас говорят, читай любой намаз, который знаешь.

но посты начал помаленьку понимать. Вод код на 1С. может еще какому нибудь новичку понадобится))):

    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(Имя);
    ПредСтр = "";
    хТек = 0;
    уТек = 0;
    Числа = "0123456789-.";
    Для ц = 1 по Текст.КоличествоСтрок() Цикл 
        Состояние(ц);
        Стр = Текст.ПолучитьСтроку(ц);
        Стр = Врег(Стр);
        ПозЖ3 = Найти(Стр, "G3");
        ПозЖ2 = Найти(Стр, "G2");
        
        ПозЖ31 = Найти(Стр, "G03");
        ПозЖ21 = Найти(Стр, "G02");
        хПред = хТек;
        уПред = уТек;
        
        хТек = "";
        уТек = "";
        I = "";
        J = "";
        Буква = "";
        НачалоХ = Ложь;
        НачалоУ = Ложь;
        НачалоИ = Ложь;
        НачалоЖ = Ложь;
        
        Для к = 1 по СтрДлина(Стр) Цикл 
            Буква = Сред(Стр, к, 1);
            Если Буква = "X" Тогда 
                НачалоХ = Истина;
                НачалоУ = Ложь;
                НачалоИ = Ложь;
                НачалоЖ = Ложь;
                Продолжить;
            ИначеЕсли Буква = "Y" Тогда 
                НачалоХ = Ложь;
                НачалоУ = Истина;
                НачалоИ = Ложь;
                НачалоЖ = Ложь;
                Продолжить;
            ИначеЕсли Буква = "I" Тогда 
                НачалоХ = Ложь;
                НачалоУ = Ложь;
                НачалоИ = Истина;
                НачалоЖ = Ложь;
                Продолжить;
            ИначеЕсли Буква = "J" Тогда 
                НачалоХ = Ложь;
                НачалоУ = Ложь;
                НачалоИ = Ложь;
                НачалоЖ = Истина;
                Продолжить;
            КонецЕсли;
            
            Если Найти(Числа, Буква) = 0 Тогда 
                НачалоХ = Ложь;
                НачалоУ = Ложь;
                НачалоИ = Ложь;
                НачалоЖ = Ложь;
            КонецЕсли;
            
            Если НачалоХ Тогда 
                Если (Буква = ".") и ((хТек = "") или (хТек = "-")) Тогда 
                    хТек = хТек + "0";
                КонецЕсли;
                хТек = хТек + Буква;
            КонецЕсли;
            
            Если НачалоУ Тогда 
                Если (Буква = ".") и ((уТек = "") или (уТек = "-")) Тогда 
                    уТек = уТек + "0";
                КонецЕсли;
                уТек = уТек + Буква;
            КонецЕсли;
            
            Если НачалоИ Тогда 
                Если (Буква = ".") и ((I = "") или (I = "-")) Тогда 
                    I = I + "0";
                КонецЕсли;
                I = I + Буква;
            КонецЕсли;
            
            Если НачалоЖ Тогда 
                Если (Буква = ".") и ((J = "") или (J = "-")) Тогда 
                    J = J + "0";
                КонецЕсли;
                J = J + Буква;
            КонецЕсли;
            
        КонецЦикла;
        Попытка
            Если ПустаяСтрока(хТек) Тогда 
                хТек = хПред;
            Иначе
                хТек = Число(хТек);
            КонецЕсли;
            
            Если ПустаяСтрока(уТек) Тогда 
                уТек = уПред;
            Иначе 
                уТек = Число(уТек);
            КонецЕсли;
            
            Если не ПустаяСтрока(I) Тогда 
                I = Число(I);
            КонецЕсли;
            Если не ПустаяСтрока(J) Тогда 
                J = Число(J);
            КонецЕсли;
            
        Исключение
            Сообщить("Не удалось преобразовать в число !!! стр № " + ц);
            Продолжить;
        КонецПопытки;
        Если (ПозЖ3 <> 0) или (ПозЖ2) или (ПозЖ31 <> 0) или (ПозЖ21 <> 0) Тогда 
            
            хЦентрДуги = хПред - I;
            уЦентрДуги = уПред - J;
            к1 = ABS(хЦентрДуги - хПред);
            к2 = ABS(уЦентрДуги - уПред);
            Р1 = Sqrt(к1*к1 + к2*к2);
            
            к1 = ABS(хЦентрДуги - хТек);
            к2 = ABS(уЦентрДуги - уТек);
            Р2 = Sqrt(к1*к1 + к2*к2);
            Если ABS(Р1 - Р2) > 0.002 Тогда 
                Сообщить("Большая разница в диаметре");
                Продолжить;
            КонецЕсли;
            Радиус = Окр((Р1 + Р2)/2, 3);
            
            Если ПозЖ2 <> 0 Тогда 
                НовСтр = "G2";
            ИначеЕсли ПозЖ21 <> 0 Тогда
                НовСтр = "G2";
            ИначеЕсли ПозЖ3 <> 0 Тогда
                НовСтр = "G3";
            ИначеЕсли ПозЖ31 <> 0 Тогда
                НовСтр = "G3";
            КонецЕсли;
            НовСтр = НовСтр + "X" + хТек + "Y" + уТек + "R" + Радиус;
            Текст.ЗаменитьСтроку(ц, НовСтр);
        КонецЕсли;
        хПред = хТек;
        уПред = уТек;
        
    КонецЦикла;
    Текст.Записать(Имя);

Ссылка на сообщение
Поделиться на других сайтах

прикольный код :) с поддержкой русского языка. Наверно для данного примера не нужно было, но вообще интересно, как-то учитывается направление дуг? знак радиуса? 

 

Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, Dantist сказал:

прикольный код :) с поддержкой русского языка. Наверно для данного примера не нужно было, но вообще интересно, как-то учитывается направление дуг? знак радиуса? 

 

Главное вычислить радиус. можно с текущих координат, можно с предыдущих, разницы нет, я проверял. а направление дуги это g2 или g3.

Если у кого есть 1С, то можно просто вставить этот код, иначе придется переводить на свой язык.

 

 

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

 

Изменено пользователем akzorbek
Ссылка на сообщение
Поделиться на других сайтах

DuctPost или PM post?

Выше вам скидывали ссылку на пост, там выводит радиус!

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...