Весь код всех ваших модулей и программы скиньте.
Блин я уже 20 раз там переписал все то же если взять из примеров паскаля двигать шариком - все работает но при добавлении графического окна и опроса мыши в нем - только клик на графическом - ошибка.
Я буду наверно всю прогу с графического (2д) на 3д переносить.
Если кому нужно - там в правом нижнем углу, зажимаем на значек правую кнопку мыши и вращаем, ролик - приблежать-удалять.
если честно - супер! Даже не знаю на каком языке еще проще 3д реализовано.
Ну хорошо, вот сделайте это в отдельном файле. И скиньте то, что будет давать ошибку. Потому что на словах ничего не понятно.
А, так вам не программно надо было… Так можно в любом месте на экране зажать ПКМ и тянуть. А ещё можно зажать СКМ и тянуть, чтоб перемещать фокус камеры.
это из примеров паскаля. Даже если добавить просто графическое окно, то в 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
первым, перед всем остальным.
Выражайтесь более точно. Есть цвета IDE, есть цвета в готовой программе и т.п. Что вы имели в виду?
век живи век учись, спасибо! почему-то не подумал про это. Уже хотел программу переписывать. а жалко, граф. окно норм работает.
чтоб текст в IDE был как на форуме подсвечен (тут лучше сам текст программы выглядит).
C:\Program Files (x86)\PascalABC.NET\Highlighting
Покопайтесь там ещё в папках которые рядом, вроде есть ещё пара интересных моментов.
Но учтите, обновление всегда перезаписывает эти файлы на значение поумолчанию. Храните копию на всяк.
Да, СПАСИБО. С начало создал массив, убрал 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;
Скиньте программу целиком.
Всем здравствуйте, у меня есть 2 вопроса по поводу МЕТОДОВ для последовательностей в Паскаль.
- Можно ли решить задачу поиска в массиве максимального четного элемента с помощью методов? Но не способом ниже, а по другому? Если знаете то как? begin var a := Arr(1,2,8,3,5,6); Println(a.Where(x -> x mod 2 = 0).Max); //8 end.
- Можно ли решить задачу поиска индекса необходимого элемента в массиве с помощью МЕТОДОВ? Первое вхождение элемента можно найти методом begin var a := Arr(2,5,6,4,3,1,4,8,6); Println(a.First(x -> x =5)); //5 end. А вот как найти ИНДЕКС элемента?
- Ну, если считать что все элементы не меньше 0 - можно так:
begin
Arr(1,2,3,4,5)
.MaxBy(i->i mod 2 = 0 ? i : 0)
.Print;
end.
- Пройдитесь, посмотрите описания всех экстенш-методов у массива. Для данной задачи - и названия хватит чтоб понять всё:
begin
Arr(0,1,2,3,4,5,6,7,8,9)
.IndexOf(5)
.Print;
end.
Спасибо большое!!!
Эта все так же программа, что я Вам пару месяцев назад сбрасывал и с которой Вы сделали вариант с ООП но я так и не смог осилить , долго очень рыл рыл, но не смог, тут нужно признать - интеллекта наверно уже недостаточно, поэтому вернулся к старой программе. Сейчас вот: если указать на нейрон 3, в 3д окне появится шарик, при указывании на него должен высветится код программы (это не совсем стандартная нейросеть) (потом хочу чтоб в 3д была построена "нейро"сеть)
ИИ_0_05 3d.pas (41,6 КБ)
понял ошибку - слишком часто перерисовываю 3д сцену, ввел задержку отрисовки через Milliseconds все стало норм.
я не пойму, а что нельзя создавать переменные начинающиеся с цифры??? типа 3д_переменная
их еще и переименовать теперь нельзя
и еще очень глючат регионы, очень сильно раздражает нервы их самораскрытие