Jump to content

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


Recommended Posts

  • 2 weeks later...

Кто знает, как работать с ключевым словом EndWhile в коде параметрических объектов?

Оно синим подсвечивается, но как заставить его оставить перебор не могу понять)
image.thumb.png.a0af91ab5e20ba8bbe0470c5feae9686.png

Link to comment
Share on other sites

  • 1 month later...
В 15.01.2021 в 14:22, dromandon сказал:

Кто знает, как работать с ключевым словом EndWhile в коде параметрических объектов?

Оно синим подсвечивается, но как заставить его оставить перебор не могу понять)
image.thumb.png.a0af91ab5e20ba8bbe0470c5feae9686.png

Перебор останавливает не EndWhile, а While, если условие при нём не выполняется. В вашем случае оно будет выполняться всегда, потому что увеличение i идёт вне цикла, т.е. в цикле всегда i будет одинаковым - в данном случае 1. Перетащите i=i+1; на строку выше, а EndWhile вынесите за скобки.

While (i<100)
{
	i=i+1;
}
EndWhile

 

Edited by Kreator
Опечатка
  • Like 2
Link to comment
Share on other sites

53 минуты назад, Kreator сказал:

Перебор останавливает не EndWhile, а While, если условие при нём не выполняется. В вашем случае оно будет выполняться всегда, потому что увеличение i идёт вне цикла, т.е. в цикле всегда i будет одинаковым - в данном случае 1. Перетащите i=i+1; на строку выше, а EndWhile вынесите за скобки.

While (i<100) { i=i+1; } EndWhile



While (i<100)
{
	i=i+1;
}
EndWhile

 

Я надеялся, что оно будет работать как break, т.е. останавливать цикл)
Но понял, что нужно для исполнения)

Edited by dromandon
Link to comment
Share on other sites

18 минут назад, dromandon сказал:

Я надеялся, что оно будет работать как break, т.е. останавливать цикл)

Так и работает, при выполнении условия идет дальше, пока условие цикла не выполнено зачем перепрыгивать?

Edited by doctorraz
Link to comment
Share on other sites

4 минуты назад, doctorraz сказал:

пока условие цикла не выполнено зачем перепрыгивать?

Видимо нужно было прервать мне цикл, сейчас уже не помню почему)
 

Link to comment
Share on other sites

14 минут назад, dromandon сказал:

Видимо нужно было прервать мне цикл, сейчас уже не помню почему)

В позапрошлом году чет такое лепили... вложенные циклы.. полистай назад..

Link to comment
Share on other sites

  • 2 weeks later...

Добрый день, коллеги!

Есть ли возможность разорвать связь параметрического объекта с табличными параметрами? Хочу реализовать возможность выбора из таблицы и ручного ввода параметров, но после выбора из таблицы, вручную значения уже не поменять (возвращаются к выбранным табличным после очередного вызова формы 1).

В прикрепленном примере объект "маркер" может брать параметры из таблицы в объекте "материалы".

_ПКО.mcdi

Link to comment
Share on other sites

1 час назад, AlExTs сказал:

но после выбора из таблицы, вручную значения уже не поменять

Вот, кажется, пример, который показывает как менять источник. Но там не автоматически, а по выбору

Link to comment
Share on other sites

  • 2 months later...

Всем, добрый день! Подскажите пожалуйста, как распознается длина элементов в параметрических объектах? Через параметр (например размер), объект (например отрезок или полилинию) или по другому ?

Link to comment
Share on other sites

11 минут назад, MD27 сказал:

Всем, добрый день! Подскажите пожалуйста, как распознается длина элементов в параметрических объектах? Через параметр (например размер), объект (например отрезок или полилинию) или по другому ?

Если я правильно понимаю вопрос, то через образмеренный примитив) если размер не будет ни к чему привязан, он выделится красным) а если к примитиву не будет привязан размер и тот будет неопределенной длины, по появится в бесконечность уходящий красный размер с привязкой от базовой точки до непривязанного конка приметива) 

  • Like 1
Link to comment
Share on other sites

9 минут назад, dromandon сказал:

Если я правильно понимаю вопрос, то через образмеренный примитив) если размер не будет ни к чему привязан, он выделится красным) а если к примитиву не будет привязан размер и тот будет неопределенной длины, по появится в бесконечность уходящий красный размер с привязкой от базовой точки до непривязанного конка приметива) 

Я правильно понимаю, если в блоке будет не хватать параметра к линии, то длину этой линии я не смогу получить. Если есть 2 одинаковые линии в блоке, то длину могу получить через 1 параметр привязанный к одной линии и остальное по формуле (например длина линии умноженная на 2), это так?

Link to comment
Share on other sites

Советую вам открыть справку в программе и по поиску найти нужный вам раздел, касающийся распознавания исполнения) там всё достаточно понятно расписано) 

  • Like 1
Link to comment
Share on other sites

7 минут назад, dromandon сказал:

Советую вам открыть справку в программе и по поиску найти нужный вам раздел, касающийся распознавания исполнения) там всё достаточно понятно расписано) 

Если бы там было понятно, я тут бы не спрашивал, казалось бы элементарный вопрос. А еще салют разработчикам за неработающий функционал в 20.1 СПДС (20.1.5304.3354/20.1.3363.5269) в скрипте не присваивает кол-во и движение ручек. Только дописывать не надо, что руками можно прописать, человеку который только начинает разбираться в скрипте.

Link to comment
Share on other sites

12 минут назад, MD27 сказал:

если в блоке будет не хватать параметра к линии

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

добавлено через 6 минут
1 минуту назад, MD27 сказал:

в скрипте не присваивает кол-во и движение ручек

 Это?

3 минуты назад, MD27 сказал:

Только дописывать не надо, что руками можно прописать

 

 

4 минуты назад, MD27 сказал:

А еще салют разработчикам за неработающий функционал

Да вообще бестолковые, ни искусственного интеллекта, ни нейронных сетей. Даже красной кнопки нет 👎 

  • Like 1
  • Haha 2
Link to comment
Share on other sites

20 минут назад, MCAD сказал:

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

Вам отдельное спасибо за Ваши видео на ютуб, процесс обучения идет быстрее. Нет, у меня обычные блоки без массива. Там два вида, есть скрытые линии, и растяжение, ну и получение длины через табл. Пока все делаю на пробной версии, рабочая не работает, я написал об этом Выше. И еще, не могу скрипт обновлять, так как сбрасывает наличие и движение ручек до базовой(то же к предыдущему посту). Придётся все делать руками. Прочитал всю справку распечатал 8 примеров, а до сих пор вопросов много. Пробная версия СПДС+АК, там работает, там сейчас и делаю.

-------------------------------------------------------------------------------------------------------

"Даже красной кнопки нет 👎 " Сарказм засчитан) Просто хотел как то облегчить и ускорить работу в программе с помощью параметрических блоков, прочитал и изучил часть литературы, я понимаю, что еще много надо понять. Вроде готов создавать несложные параметрические блоки. Создал скрипт, ладно он не прописывает, то что должен. Так и еще и обнуляет скрипт при повторном редактирование. 

Edited by MD27
  • Like 1
Link to comment
Share on other sites

@MD27, я в загрузки выкладывал несколько параметрических объектов, думаю интересен для вас должен быть объект обрезки прямоугольной, а именно скрипт поведения точек растягивания) 

Edited by dromandon
  • Like 1
Link to comment
Share on other sites

В 15.05.2021 в 19:42, MD27 сказал:

в скрипте не присваивает кол-во и движение ручек.

Не нашли удачного решения для создания Grip's   в "Мастере объектов". 

Уж очень много на них завязано.

Посмотрите ролик, возможно станет более понятно. Пример я приложил. 

 

Кроме того, все объекты БД могут быть описаны в трёх координатах. 

Если  посмотреть на них в изометрии (при выделенных объектах) ну будет более понятно

image.thumb.png.b9248a36f8abef2e5f69e45cea7ed6f0.png

function SetGripPoint {
	NGrip = 4;
	pntGrip0 = pntOrigin;
	//ручка длины
	pntGrip1 = pntOrigin+L*vecDirection;
	//Ручка высоты двутавра	
	pntGrip2 = pntOrigin+h*vecPlane;
	//Ручка ширины полки двутавра
	vecNormal=getLocalNormal(vecDirection,vecPlane);
	pntGrip3 = pntOrigin+vecNormal*b/2;
};

function OnMoveGripPoint{
	if (NMovingGrip == 0) {
		pntOrigin = pntGrip0;
	};
	//ручка длины
	if(NMovingGrip == 1){
		L = max(vecLen(pntGrip0 - pntGrip1)/rScl,1);
		vecDirection = pntGrip1 - pntGrip0;
};
	//Ручка высоты двутавра		
	if(NMovingGrip == 2){
//Так как, в данном конкретном случае параметры b и h являются табличными 
//(ограничены СТО АСЧМ 20-93),создаём временную переменную rNew_h.
//Значение будет определяться как размер между точками pntGrip0 - pntGrip2
		rNew_h = vecLen(pntGrip0 - pntGrip2)/rScl;
		LoadInCache( seria,  h, b  );
// подбираем ближайшие значения. При этом, табличное значение "h" будет сравниваться 
//с ближайшим к rNew_h 
		SelectInCache( "kFirst", "seria", "~", seria, "h", "~", rNew_h, "b", "~", b);
	};		
	//Ручка ширины полки двутавра. Действиия аналогично с движдением NMovingGrip == 2
	if(NMovingGrip == 3){
		rNew_b = 2*vecLen(pntGrip0 - pntGrip3)/rScl;
		LoadInCache( seria, b,h  );
		SelectInCache( "kFirst", "seria","~",seria, "b", "~", rNew_b,  "h", "~", h);
	};		
};
Спойлер

image.png.a1016d09365d432b9b8a50a6396c74cd.png

 

 

 

 

Grips Крест.mcd

  • Like 3
  • Thanks 1
Link to comment
Share on other sites

Спасибо за развёрнутый ответ. Продолжаю изучение. Но пока сделал дин. блоки в АК на скорую руку. Так что, теперь торопиться некуда). 

  • Like 1
Link to comment
Share on other sites

1 минуту назад, MD27 сказал:

Но пока сделал дин. блоки в АК

Так одно другому не мешает,   с блоками тоже можно работать как с объектами.

Самый простой пример:

  • Like 3
Link to comment
Share on other sites

А кто-нибудь может разъяснить, как правильно пользовать messagebox?
Желательно на примере, конечно)
Хочу реализовать запрос, при коннекте к объекту, но у меня какой-то неадекват выходит.

В справке нашёл следующее:
image.png.f2876bad1c52d29f1e63300521f4f6eb.png

У себя в скрипте написал так:
 

function OnConnect 
{
	if(rPart == 0)
	{
		if(obj.strTheType == "Дверь" && obj.strTheName == "Дверь не базовая"
		{
			SetGeomConstraint(INSERT,CODIRECT,obj,WP1,obj.WP1,0,FALSE);
			SetParamConstraint(rLengthHole, obj, EXPR, "obj.rLength", FALSE);
			SetParamConstraint(rWideHole, obj, EXPR, "obj.rWidth", FALSE);			
			NoVectorSelect = 1;
			sTypeLintelBlocks=2;
			if(IDNO == MessageBox("Несущая пермычка?", MB_YESNO, MB_ICONQUESTION))
			{
				sTypeLintelBlocks=1;
			}
			LintelBlocksAutoSelection();
			CenterAll();
			
			Handled = OBJ_HANDLED;
		};
	};
}

 

На что при попытки достать перемычку из базы получаю следующее:

В чём косяк? Как правильно работать с этой функцией?)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт Разработка? Tell a friend!
×
×
  • Create New...