Помощь новичкам

Весь код всех ваших модулей и программы скиньте.

Блин я уже 20 раз там переписал все :frowning: то же если взять из примеров паскаля двигать шариком - все работает но при добавлении графического окна и опроса мыши в нем - только клик на графическом - ошибка.

Я буду наверно всю прогу с графического (2д) на 3д переносить.

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

если честно - супер! Даже не знаю на каком языке еще проще 3д реализовано.

Ну хорошо, вот сделайте это в отдельном файле. И скиньте то, что будет давать ошибку. Потому что на словах ничего не понятно.

А, так вам не программно надо было… Так можно в любом месте на экране зажать ПКМ и тянуть. А ещё можно зажать СКМ и тянуть, чтоб перемещать фокус камеры.

1 лайк

это из примеров паскаля. Даже если добавить просто графическое окно, то в 3д перестает работать мышь. и если кликнуть по графическому - вылетает ошибка. если отключить uses graphABC все обратно заработает.

uses Graph3D;
uses graphABC;

begin 
  View3D.Title := 'Перетягивайте мышью сферу';
  var s := Sphere(0,0,0,1);
  var obj: Object3D;
  OnMouseDown += procedure (x,y,mb) -> begin
    obj := FindNearestObject(x,y);
    if obj=s then View3D.Title := '';
  end;

  OnMouseUp += procedure (x,y,mb) -> begin
    obj := nil
  end;
  
  OnMouseMove += procedure (x,y,mb) -> begin
    if obj = nil then exit;
    var pp := PlaneXY.PointOnPlane(x,y);
    if pp<>BadPoint then
    begin
      if pp.X<-5 then pp.X := -5;
      if pp.X>5 then pp.X := 5;
      if pp.Y<-5 then pp.Y := -5;
      if pp.Y>5 then pp.Y := 5;
      obj.Position := pp;
      View3D.SubTitle := $'X={pp.x.ToString(2)} Y={pp.y.ToString(2)}';
    end;
  end;
end.

К стати еще не допили? как можно сделать чтоб расцветка программы была как тут на форуме? (это реально помогает глазу за программу “цепляться”)

У вас тут перемешаны имена из GraphABC и Graph3D. К примеру, OnMouseDown есть и в GraphABC. Вы поставили подключение GraphABC после Graph3D, поэтому из 2 OnMouseDown выбирает последнюю (это вроде правило из справки, всегда выбирается последний), ту что из GraphABC. И в итоге, из потока формы GraphABC вызывается метод FindNearestObject, принадлижащий Graph3D, и это вызывает ошибку. Вы можете написать Graph3D.OnMouseDown, чтоб компилятор выбирал именно вариант из Graph3D. Или поставить подключение GraphABC первым, перед всем остальным.

1 лайк

Выражайтесь более точно. Есть цвета IDE, есть цвета в готовой программе и т.п. Что вы имели в виду?

век живи век учись, спасибо! почему-то не подумал про это. Уже хотел программу переписывать. а жалко, граф. окно норм работает.

чтоб текст в IDE был как на форуме подсвечен (тут лучше сам текст программы выглядит).

C:\Program Files (x86)\PascalABC.NET\Highlighting
Покопайтесь там ещё в папках которые рядом, вроде есть ещё пара интересных моментов.

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

1 лайк

Да, СПАСИБО. С начало создал массив, убрал println с конца, создал отдельную строку. Затем TransForm заработал.

Уважаемые посетители форума, бьюсь уже несколько часов, что-то в этом месте жудко подвисает (более 10 секунд и бывает наглухо виснит) при клике на единственном шарике, что может быть?

            begin
              //View3D.Title := 'фибрилярный потоковый процессор';
              var шарик := Sphere((rec_i * 2), 0, 0, 1);  
              
              Graph3D.OnMouseDown += procedure (x, y, mb) -> begin
                объект3Д := FindNearestObject(x, y);
                
                if flag_3д_показать_программы then
                begin
                
                  if объект3Д = шарик then
                  
                  
                  begin
                    var kod_x := neyron_prog[показать_нейрон_н, 1, rec_i, 1];
                    var kod_i := 1; 
                    while kod_x <> 32600 do//пробежка по программе  
                    begin
                      kod_x := neyron_prog[показать_нейрон_н, 1, rec_i, kod_i];
                      Text3D((1 * kod_i), 7, 7, (kod_x.ToString), 1);
                      kod_i += 1; if kod_i > 5 then kod_x := 32600;
                    end;
                  end;
                  flag_3д_показать_программы := false;
                end;  
              объект3Д := nil; 
              end;
            end;

Скиньте программу целиком.

1 лайк

Всем здравствуйте, у меня есть 2 вопроса по поводу МЕТОДОВ для последовательностей в Паскаль.

  1. Можно ли решить задачу поиска в массиве максимального четного элемента с помощью методов? Но не способом ниже, а по другому? Если знаете то как? begin var a := Arr(1,2,8,3,5,6); Println(a.Where(x -> x mod 2 = 0).Max); //8 end.
  2. Можно ли решить задачу поиска индекса необходимого элемента в массиве с помощью МЕТОДОВ? Первое вхождение элемента можно найти методом begin var a := Arr(2,5,6,4,3,1,4,8,6); Println(a.First(x -> x =5)); //5 end. А вот как найти ИНДЕКС элемента?
  1. Ну, если считать что все элементы не меньше 0 - можно так:
begin
  Arr(1,2,3,4,5)
  .MaxBy(i->i mod 2 = 0 ? i : 0)
  .Print;
end.
  1. Пройдитесь, посмотрите описания всех экстенш-методов у массива. Для данной задачи - и названия хватит чтоб понять всё:
begin
  Arr(0,1,2,3,4,5,6,7,8,9)
  .IndexOf(5)
  .Print;
end.

Спасибо большое!!! :star_struck:

Эта все так же программа, что я Вам пару месяцев назад сбрасывал и с которой Вы сделали вариант с ООП но я так и не смог осилить , долго очень рыл рыл, но не смог, тут нужно признать - интеллекта наверно уже недостаточно, поэтому вернулся к старой программе. Сейчас вот: если указать на нейрон 3, в 3д окне появится шарик, при указывании на него должен высветится код программы (это не совсем стандартная нейросеть) (потом хочу чтоб в 3д была построена "нейро"сеть)

ИИ_0_05 3d.pas (41,6 КБ)

понял ошибку - слишком часто перерисовываю 3д сцену, ввел задержку отрисовки через Milliseconds все стало норм.

я не пойму, а что нельзя создавать переменные начинающиеся с цифры??? типа 3д_переменная

их еще и переименовать теперь нельзя :frowning:

и еще очень глючат регионы, очень сильно раздражает нервы их самораскрытие