Перейти к содержимому


параметрические объекты СПДС


Сообщений в теме: 287

#281 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 212 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 02 Октябрь 2017 - 03:48

А можно задавать параметрическому объекту количество и нумерацию ручек не конкретным числом, а как-то в общем виде..? плавающим, в зависимости от кол-ва циклов внутри объекта, к примеру..?

#282 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 605 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 02 Октябрь 2017 - 08:48

думаю, что нет.
количество и расположение ручек задается один раз и изменить не получится
function SetGripPoint {	//ручки
NGrip=4;
pntGrip0=pntOrigin;
pntGrip1=pntOrigin-vecDirection*DNf/2;
pntGrip2=pntOrigin+vecPlane*DNf/2;
pntGrip3=pntAlfa;
}
но по условию можно изменять реакцию объекта на ручку
например
function OnMoveGripPoint {   //реакция на изменение ручек
if (NMovingGrip==1){
  vecXOld=vecDirection;
  vecDirection=-(pntGrip1-pntGrip0);
  restoreBasis(vecXOld,vecPlane,vecDirection);
} else if (NMovingGrip==2 && (lViewType == VBACK || lViewType == VFRONT)){ //если фронт или сзади, то зеркалируем
						  //относительно vecDirection
  vecPlane=-vecPlane ;	   //зеркалируем относительно vecDirection
} else if (NMovingGrip==2 && (lViewType != VBACK || lViewType != VFRONT)){ //просто крутим весь объект
  vecPlane=(pntGrip2-pntGrip0);
} else if (NMovingGrip==3 & (lViewType == VBACK || lViewType == VFRONT)){
  Alfa=anglePi(vecDirection, (pntGrip3-pntGrip0))+45; //меняем угол отвода
  AlfaChanged();
} else {
  pntOrigin=pntGrip0;
}
}

Прикрепленные файлы



#283 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 212 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 02 Октябрь 2017 - 09:01

Интуитивно тоже догадываюсь, что нет, но душа просит чего-то типа:

function SetGripPoint { //ручки
NGrip=4+N; // где N - уже имеющаяся переменная, привязанная к циклу
pntGrip0=pntOrigin;
pntGrip1=pntOrigin-vecDirection*DNf/2;
pntGrip2=pntOrigin+vecPlane*DNf/2;
pntGrip3=pntAlfa;
pntGrip(3+cicle(уловно-всё-размеется-N))=блаблабла тож чё-то циклическое;
}
Если кол-во ручек в реальном времени подчиняется логическим условиям, то что по идее мешает ему подчиняться количественным значениям переменных? Механика-то примерно та же...Вопрос, могёт ли это программа... Ну, ждём авторитетного ответа.

#284 Mитька

    Активист

  • Пользователи
  • PipPipPipPip
  • 212 сообщений
  • Пол:Мужчина
  • Город:Хабаровск

Отправлено 02 Октябрь 2017 - 09:04

Хотя... при небольшом диапазоне цикла проще прописать условия для всех хотя бы теоретически возможных ручек да и не париться...
Так что вопрос остаётся, но становится чисто академическим.

Ред: Не диапазоне, а кол-ве повторений.

Сообщение отредактировал Mитька: 02 Октябрь 2017 - 09:17


#285 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 605 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 02 Октябрь 2017 - 09:18

но одно маленькое НО
SetGripPoint вызывается каждый раз при изменении свойств объекта извне (от другого объекта, через панель свойств или форму объекта)
upd Не вызывается при перемещении и копировании средствами АК (как в нано незнаю)
при воздействии на ручки SetGripPoint то же вызывается, но после OnMoveGripPoint

проверить легко
достаточно в соответствующие секции запихнуть ShowValue ("SetGripPoint ",); и ShowValue ("OnMoveGripPoint ",); и посмотреть в IDM, что за чем и когда отрабатывает.
------------------------------
логично было предположить, что если в SetGripPoint запихнуть условие от чего-то (или цикл), то можно было бы изменять количество и расположение ручек (по условию), но не забывать, в OnMoveGripPoint учитывать, что количество ручек изменилось.
не проверял, но коль метод вызывается каждый раз, должно сработать )))))
чессно говоря не люблю я этих виртуальных коней обсуждать, как подсказывает мой скромный опыт, если у юзера возникает нужда так извращаться, то либо человеческие бизнесспроцессы пытается в код запихнуть, либо использует не то и не по назначению.
и когда конь превращается в реального, выясняется, что все можно было сделать намного проще штатными методами.

Сообщение отредактировал doctorraz: 02 Октябрь 2017 - 09:36


#286 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 605 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 02 Октябрь 2017 - 10:03

проверил, меняет положение ручки в зависимости от lViewType
количество ручек то же можно изменять :) :) академически :)
function SetGripPoint {    //ручки
NGrip=4;
ShowValue ("SetGripPoint ",);
if (lViewType != VFRONT){
pntGrip0=pntOrigin-vecDirection*500;
} else {
pntGrip0=pntOrigin;
}
pntGrip1=pntOrigin-vecDirection*DNf/2;
pntGrip2=pntOrigin+vecPlane*DNf/2;
pntGrip3=pntAlfa;
}


#287 MCAD

    Активист

  • Пользователи
  • PipPipPipPip
  • 845 сообщений
  • Пол:Мужчина

Отправлено 04 Октябрь 2017 - 18:15

Вопрос из личной переписки, думаю многим будет тоже полезно:
Как скрыть линии в объекте?

Цитата

Line(node2,node0,TypeLine,HideLine);




#288 doctorraz

    Активист

  • Пользователи
  • PipPipPipPip
  • 605 сообщений
  • Пол:Мужчина
  • Город:Волгоград
  • Интересы:всё понемногу

Отправлено 04 Октябрь 2017 - 22:02

TypeLine принимает значения
1 Сплошная толстая основная линия Сплошная
2 Сплошная тонкая линия Сплошная
3 Волнистая линия ГОСТ 2.303 3
4 Штрихпунктирная тонкая(осевая) линия ГОСТ 2.303 5
5 Штриховая линия ГОСТ 2.303 4
6 Штрихпунктирная утолщенная линия ГОСТ 2.303 6
7 Разомкнутая линия Сплошная
8 Сплошная тонкая с изломами линия ГОСТ 2.303 8
9 Штрихпунктирная с двумя точками тонкая линия ГОСТ 2.303 9
0- по объекту, т.е. тип толщина и цвет по слою или из свойств
-----------------
HideLine-0 (невидима) или 1 (видима)

Сообщение отредактировал doctorraz: 04 Октябрь 2017 - 22:03






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей