그래픽 스크립트 문제 해결에 도움이 필요합니다: "그래픽 스크립트 로그에 오류가 보고되었습니다."그래픽 스크립트 내에서 프레임박스의 축을 참조하는 방법을 이해하는 데 도움이 필요합니다.
현재 제가 가지고 있는 것은 다음과 같습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
ob_group = Outline Box( "Testing Handles: " || (dt << Get Name) );
nw = New Window( (dt << get name), ob_group );
GB_wHandle = Function( {dt, X_parameter, Y_Parameter, groupByColumnString},
groupByColumn = Column( dt, groupByColumnString );
cb = Context Box(
box:exx = 60;
box:exy = 60;
box:gb = Graph Builder(
Size( 450, 350 ),
Ignore Platform Preferences( 1 ),
Show Control Panel( 0 ),
Variables( X( Column( X_Parameter ) ), Y( Column( Y_Parameter ) ), Overlay( groupByColumn ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
box:rgb = box:gb << Report;
box:framebox = box:rgb << XPATH( "//FrameBox" );
box:axis = box:rgb << XPATH( "//AxisBox" );
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
{box:exx, box:exy} = box:axisMin + 10;
box:framebox << Add Graphics Script(
"Front",
Description( "Handle" ),
//Script start
{Handle(
box:exx,
box:exy,
box:exx = x;
box:exy = y;
) ;
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
Pen Color( "Red" ) ; Line( box:axisMin, {box:exx, box:exy} ) ; }
);
);
Return( cb );
);
ob_group << Append( GB_wHandle( dt, "height", "weight", "sex" ) );
여러 개의 GB가 같은 창에 있고 각 GB마다 독립적인 핸들을 가지고 있기 때문에 컨텍스트 상자가 필요합니다.
그래프의 한 지점이나 표의 한 행을 선택하여 제외하기 전까지는 모든 것이 정상적으로 작동합니다.
그러면 그래픽이 사라지고 로그에 "그래픽 스크립트에서 오류가 보고되었습니다" 및 "Send는 'List'에 액세스하거나 평가할 때 스크립트 가능한 개체를 예상합니다. {/*###*/DisplayBox[], DisplayBox[]}"라는 메시지가 표시됩니다.
오류는 다음 줄들 때문에 발생합니다:
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
해당 부분을 주석 처리하면 오류는 발생하지 않지만, 사용자가 축 스케일을 변경할 경우 축의 최소/최대값이 업데이트되지 않습니다.
어떻게 해결할 수 있을까요?
자동화 및 스크립팅제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."이는 문제를 훨씬 간단한 방식으로 보여줍니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
ob_group = Outline Box("Testing Handles: " || (dt << Get Name));
gb = dt << Graph Builder(
Size(450, 350),
Ignore Platform Preferences(1),
Show Control Panel(0),
Variables(X(Column("height")), Y(Column("weight")), Overlay("sex")),
Elements(Points(X, Y), Smoother(X, Y))
);
fbs = Report(gb) << XPATH("//FrameBox");
abs = Report(gb) << XPATH("//AxisBox");
show(fbs, abs);
dt << Select Rows(1) << Hide and Exclude(1) << Clear Select;
wait(1);
show(fbs, abs);
행을 제외하면 그래프 빌더가 다시 계산되고 참조가 삭제됩니다.
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."이 문제를 해결하는 한 가지 방법은 추가하는 것입니다.
box:axis = box:rgb << XPATH("//AxisBox");
그래픽 스크립트에
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."네, 다시 그린 그림인 줄 알았는데, 정확히 어떤 부분을 참조해야 할지 모르겠더라고요.
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."네, 잘 작동했어요. 무슨 이유인지 모르겠지만 스크립트 안에서 보고서를 참조할 수 없을 거라고 생각했거든요.
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."@jthi 님 , 질문 하나만 더 드릴게요.
예를 들어, 그래프 빌더에 그래픽 스크립트를 추가하는 기능을 함수로 묶고 싶다고 가정해 보겠습니다.
이 함수는 디스플레이 박스에 대한 참조만 입력받으면 되고, 그에 해당하는 프레임 박스를 찾아 스크립트를 추가하면 됩니다.
현재 제 함수에서는 Graph Builder를 Context Box로 감싸야 합니다. 그래야 이 스크립트를 사용하여 생성(특히 처리)한 요소들이 같은 창에 있는 다른 Graph Builder의 요소들과 독립적으로 유지될 수 있습니다.
질문 - 격리된 컨텍스트를 저장하기 위해 함수에 어떤 표시 상자를 제공해야 하나요? XML에서 EvalContextBox라는 것을 봤는데, 이것이 "Context Box"에서 생성되는 것인가요?
함수 내에서 어떤 구문을 사용해야 할까요? 함수는 컨텍스트 박스를 사용하지 않으므로 "box" 네임스페이스를 삭제해야 합니다. 이 경우 컨텍스트를 어떻게 제한해야 할까요?
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."함수에 어떤 값을 전달하고 싶으신 건지 잘 모르겠습니다. 그래프 빌더에 대한 참조만 전달하면 되는 건가요? 그래프 빌더는 컨텍스트 박스 안에 그대로 남아 있는 건가요?
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."제가 궁금한 점 중 하나는 함수에 무엇을 전달해야 하는지, 그리고 이 경우에도 컨텍스트 박스가 여전히 필요한지 여부입니다.
현재 제 스크립트는 다음과 같은 구조로 되어 있습니다.
//Preparing display boxes structure and window
lub = Lineup Box( N );
ob_group = Outline Box( "Report: " || (dt << Get Name) );
ob_group << Append( lub );
nw = New Window( (dt << get name), Window View("Invisible"), ob_group );
그런 다음 데이터 테이블을 사용하여 플롯할 항목 등을 선택하고, 이 함수를 사용하여 그래프 빌더가 포함된 컨텍스트 상자를 생성하고 컨텍스트 상자를 반환합니다.
GB_func = Function( {dt, X_parameter, Y_Parameter...},
cb = Context Box(
gb = Graph Builder(...
//
<GRAPH builder="" code="">
); box:rgb = gb << Report; //Doing some other stuff //Adding Graphics Script box:framebox = box:rgb << XPATH( "//FrameBox" ); box:framebox << Add Graphics Script(...) Return( cb ); );
</GRAPH>
그런 다음 그래프를 그리는 데 필요한 열을 선택하고, 각 열에 대해 그래프 빌더 플랫폼이 포함된 컨텍스트 상자를 만듭니다.
For Each( {Y_Parameter, index}, Y_Parameters,
lub << Append( GB_func( dt, X_Parameter, Y_Parameter));
);
제가 원하는 것은 각 그래프 빌더에 필요한 표시 상자나 참조를 전달할 수 있는 함수입니다. 이 함수는 현재와 동일하게 작동하는 그래픽 스크립트를 추가하여 다른 그래프 빌더와 독립적으로 작동하도록 해야 합니다.
최종 목표는 그래프 빌더 컨텍스트 메뉴를 통해 그래프에 추가 그래픽을 켜거나 끌 수 있도록 하는 것입니다. 그래픽이 있는 경우와 없는 경우 모두 사용 사례가 있습니다. 그래픽 스크립트를 제거하는 것은 문제가 없는 것으로 알고 있는데, 이 경우에는 어떻게 추가해야 할지 방법을 찾고 있습니다.
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."컨텍스트 박스를 전달하는 것이 가장 쉬운 방법일 가능성이 높습니다. "전역" 값을 박스가 아닌 다른 네임스페이스(예: window, global, named, anonymous 등)에 저장할 수도 있습니다. 이 경우 컨텍스트 박스를 생략하고 그래프 빌더 참조를 전달할 수 있습니다.
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."Context Box가 생성하는 Display Box는 무엇인가요? EvalContextBox인가요? 그래픽 스크립트 내의 변수들이 EvalContextBox 내에서만 사용되도록 하려면 어떻게 해야 하나요? Box 네임스페이스를 사용하면 되나요? 아니면 EvalContextBox와 관련된 네임스페이스 참조를 얻는 방법이 있나요?
제목: 그래픽 스크립트 문제 해결 관련 도움 요청: "그래픽 스크립트 로그에 오류가 보고되었습니다."Namespace()를 사용할 수 있습니다.
Names Default To Here(1);
nw = New Window("",
Context Box(
box:var = "",
box:tb = Text Edit Box("AA", <
<SET function=""></SET>
<P>텍스트 편집 상자의 값을 변경하고 마지막 줄을 다시 실행하세요.</P>