Re: Нажатие кнопок в Jig...

Масштабы фиксированные (т.е. только те, что у тебя перечислены)?

(изменено: Вильдар, 10 октября 2011г. 16:12:20)

Re: Нажатие кнопок в Jig...

Александр Ривилис пишет:

Масштабы фиксированные (т.е. только те, что у тебя перечислены)?

Фиксированы. Я взял масштабы для примера.
У нас в строительстве действует система гостов на оформление проектной документации, СПДС называется. Там есть ГОСТ 2.302-68 "Масштабы".
Полный перечень такой: 2, 2.5, 4, 5, 10, 15, 20, 25, 40, 50, 75, 100, 200, 400, 500, 800, 1000.
Практически используются: 5, 10, 15, 20, 25, 50, 100.

И еще, я думал такое поведение удобнее при вставке таблицы.
Но, возможно, правильнее сделать ключевое слово [Масштаб] и при его выборе делать доп.запрос строки (т.к. запроса числа в джиге нет, по-моему), в котором уже вывести ключевые слова заданных масштабов. Может переделаю.
upd Про запрос числа. Наверно можно использовать AcquireDistance.

Re: Нажатие кнопок в Jig...

Вильдар пишет:

upd Про запрос числа. Наверно можно использовать AcquireDistance.

Можно. В данном случае наверное не следует.

(изменено: Вильдар, 10 октября 2011г. 18:55:45)

Re: Нажатие кнопок в Jig...

Александр Ривилис пишет:

Можно. В данном случае наверное не следует.

Попробовал сделать AcquireDistance (запрос в запросе), не получилось.
Т.е. "наверное не следует" потому что фиг сделаешь, так надо понимать  :D

Вот пример запроса AcquireDistance внутри запроса AcquirePoint, при выборе ключевого слова Масштаб:

protected override SamplerStatus Sampler(JigPrompts prompts)
      {
         JigPromptPointOptions optPoint = new JigPromptPointOptions("Укажите точку вставки таблицы:");
         optPoint.Keywords.Add("Масштаб");

         PromptPointResult resPoint;
         do {
            resPoint = prompts.AcquirePoint(optPoint);

            switch (resPoint.Status) {
               case PromptStatus.Cancel:
                  return SamplerStatus.Cancel;

               case PromptStatus.Keyword:
                  if (resPoint.StringResult == "Масштаб") {
                     JigPromptDistanceOptions optDist = new JigPromptDistanceOptions("Укажите масштаб таблицы:");
                     optDist.Keywords.Add("1");
                     optDist.Keywords.Add("5");
                     optDist.Keywords.Add("10");
                     optDist.Keywords.Add("15");
                     optDist.Keywords.Add("20");
                     optDist.Keywords.Add("25");
                     optDist.Keywords.Add("50");
                     optDist.Keywords.Add("100");                     
                     
                     PromptDoubleResult resDist = prompts.AcquireDistance(optDist);
                     if (resDist.Status == PromptStatus.OK) {
                        _scale = resDist.Value;
                     }
                  }
                  break;

               case PromptStatus.OK:
                  if (_cpos.DistanceTo(resPoint.Value) < 0.001)
                     return SamplerStatus.NoChange;  
                  break;                
            }
         } while (resPoint.Status == PromptStatus.Keyword);

         _cpos = resPoint.Value;
         return SamplerStatus.OK;
      }

При выборе ключевого слова, во время запроса точки, не происходит запроса дистанции. Выполнение проходит через строчку prompts.AcquireDistance и дальше идет, в редакторе запрос не появляется, возвращает resDist.Status = OK.

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

protected override SamplerStatus Sampler(JigPrompts prompts)
      {
         JigPromptPointOptions optPoint = new JigPromptPointOptions("Укажите точку вставки таблицы:");
         optPoint.Keywords.Add("Масштаб");

         PromptPointResult resPoint;
         do {
            resPoint = prompts.AcquirePoint(optPoint);

            switch (resPoint.Status) {
               case PromptStatus.Cancel:
                  return SamplerStatus.Cancel;

               case PromptStatus.Keyword:
                  if (resPoint.StringResult == "Масштаб") {
                     PromptDoubleOptions optDouble = new PromptDoubleOptions("Укажите масштаб таблицы:");
                     optDouble.Keywords.Add("1");
                     optDouble.Keywords.Add("5");
                     optDouble.Keywords.Add("10");
                     optDouble.Keywords.Add("15");
                     optDouble.Keywords.Add("20");
                     optDouble.Keywords.Add("25");
                     optDouble.Keywords.Add("50");
                     optDouble.Keywords.Add("100");
                     optDouble.AllowZero = false;

                     Editor ed = acad.DocumentManager.MdiActiveDocument.Editor;
                     PromptDoubleResult resDoub = ed.GetDouble(optDouble);
                     if (resDoub.Status == PromptStatus.OK) {
                        _scale = resDoub.Value;
                     }
                  }
                  break;

               case PromptStatus.OK:
                  if (_cpos.DistanceTo(resPoint.Value) < 0.001)
                     return SamplerStatus.NoChange;
                  break;
            }
         } while (resPoint.Status == PromptStatus.Keyword);

         _cpos = resPoint.Value;
         return SamplerStatus.OK;
      }

Вроде нормально работает. Масштаб можно произвольный задать.

Re: Нажатие кнопок в Jig...

Вильдар пишет:

Попробовал сделать AcquireDistance (запрос в запросе), не получилось.

Ну вообще-то его тоже нужно запрашивать в цикле. Так же как ты запрашиваешь AcquirePoint.

Вильдар пишет:

Почему-то думал, что в джиге нельзя делать запросы через Editor. Но попробовал, оказалось, что можно.

И это в данном случае даже правильней, т.к. ты не собираешься динамически менять размер таблицы. Вот если бы собирался, то только через AcquireDistance.