2017-11-14 3 views
1

나는 Abaqus에서 스크립트를 쓰고 있는데, 나는 원형을 찌그러 뜨리고 잘라낸 서클 (치즈처럼)으로 사각형을 만듭니다. 표면 사이에 접촉이 필요하므로 부품이 필요합니다.Abaqus Surface getSequenceFromMask

매크로 매니저 생성

s1 = a.instances['kolo-1'].edges 
side1Edges1 = s1.getSequenceFromMask(mask=('[#1 ]',),) 
a.Surface(side1Edges=side1Edges1 , name='kolkoSurf') 

문제이다 getSequenceFromMask (마스크 = ('[1])) 방법이 1을 얻기 위해? 대체 할 수 있습니까? 나는 거의 검색하지 않고 사용할 수있는 아이디어가있다 : '찾기', '얼굴', 'COORDS'그러나 나는 그것을 관리 할 수 ​​없다. 도와주세요. X, Y 또는 어쨌든 사용하여이 Surface를 추출하는 간단한 예제를 얻으 려합니다.

BR, Wonman

답변

2

당신은 기본 저널 옵션과 매크로 관리자를 사용하여 위의 저널을 기록했다. 따라서 변수 side1Edges1getSequenceFromMask() -method를 사용하여 저널에 정의됩니다. 이 방법은 녹음 중에 GUI를 클릭하여 수행 한 선택 사항을 녹음하는 것입니다. 즉, GUI를 클릭하여 모서리를 선택하면 결과는 s1에 작용하는 getSequenceFromMask() -method이며 인스턴스 'kolo-1'의 모서리 집합입니다. Abaqus Scripting Reference Guide 6.14 - 7.2.2에 따르면 getSequenceFromMask() 메서드는 많은 수의 개체가 관련되어있을 때 매우 효율적입니다. 그러나 작업 할 다른 기하학 요소를 선택하기 위해 저널 파일을 사용자 정의하려는 경우에는별로 도움이되지 않습니다.

  1. 솔루션 : 회원 replayGeometry과 JournalOptions의 recoverGeometry을 설정하는 아바쿠스 CAE의 맨 아래에있는 아바쿠스 명령 행에 명령

    session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE) 
    

    붙여 넣기 COORDINATE 반복에 반대하는 두 가지 솔루션입니다 당신 저널의 녹음. 새 저널 파일을 기록하려면 GUI를 누르는 과정을 반복해야합니다. 새로운 저널에서 getSequenceFromMask(mask=('[#1 ]',),) 명령은 기록 된 GUI 클릭을 나타내는 좌표를 기반으로 한 선택으로 대체됩니다. 그런 다음 좌표를 수정하여 저널 파일을 사용자 정의하고 후속 모델링 단계에서 사용할 가장자리를 선택할 수 있습니다.

  2. 해결 방법 : 파이썬 스크립트의 앞줄에서 Scratch에서 정의한 변수를 사용하여 side1Edges1을 정의하십시오. 필자는 저널 파일을 청사진으로 사용하여 모든 클릭 이벤트를 자신이 정의한 잘 알려진 변수를 사용하여 대체해야한다고 권장합니다. 예를 들어, 자신의 논리를 사용하여 점 myPoints = [(0,0), (0,1) ]의 목록을 정의한 다음이 점을 방법의 인수로 사용하십시오. myLine = mySketch.Line(point1=myPoints[0], point2=myPoints[1]), 후속 모델링 단계에서 사용하기 위해 myLine과 같은 새 변수를 생성합니다. 예를 배우게, 1 판은 또한에서 거의 볼 수 있습니다 :

는 아바쿠스 파이썬 API를 사용하여 모델링 워크 플로우에 대한 기본적인 이해, 내가 푸리, GM은, 아바쿠스 2011 년 파이썬 스크립트 추천을 얻으려면 대부분의 대학.

+0

Abaqus 6.14에는 상수'COORDINATES '가없는 것 같습니다. 그러나'COORDINATE'는 잘 작동합니다. – JKepler

+1

@JKepler 감사합니다. 'COORDINATES'를 'COORDINATE'로 변경하여 답을 수정했습니다. – JulianBauer

1

가장자리 기반 표면을 작성한다고 가정합니다. 가장 쉬운 방법은 여러 가지가 있습니다. 가장 쉬운 방법은

표면을 만들려는 가장자리의 어셈블리 기반 집합 ("setName")을 만듭니다.

instance=mdb.rootAssembly.instances["InstanceName"] 
set_for_surface=instance.sets["setName"].edges 
assembly.Surface(side1Edges=set_for_surface, name="surf_name") 

경계 상자 "getBoundingBox()"를 사용하여 findAt() 또는 영역을 선택했습니다. 이 부분은 다소 비슷합니다. SO answer을 참조하십시오.

편집 : 세트가 어셈블리 기반 세트 인 경우 어셈블리가 아닌 인스턴스에서 직접 액세스하십시오. 그런 다음 동일한 절차를 사용하십시오.

관련 문제