본문 바로가기

Programming99

[C#] 클래스 멤버 간 데이터 비교 - IEqualityComparer ✔ Object Member Compare 클래스 안 멤버 비교 - 변경된 데이터가 있는 사항만 추출 작업을 하다보면 클래스를 비교하는 일이 아닌 클래스간 데이터를 비교해야하는 일이 많이 발생한다. 그리고 이전에 받은 정보와 새로 받은 정보가 일치할 경우에는 내용을 업데이트 시킬 필요가 없고, 변경된 사항에만 업데이트를 시키면 된다. 이론적으로는 알겠는데 어떻게 구현해야할까. 일반적으로 클래스비교는 object.Equals 함수를 통해 클래스 비교한다. 하지만 두개의 새로운 클래스를 비교할 경우 데이터는 같아도 object.Equals에서 false를 반환한다. 두 클래스간에 멤버 값이 변경된 사항이 있는지 확인하는 방법은 IEqualityComparer 인터페이스를 활용하면 된다. 예제는 다음과 같다... 2020. 11. 17.
[Unity3D] NVIDA Flex Error - ArgumentException: ComputeBuffer.SetData() ✔ NVIDIA FLEX Error ArgumentException: ComputeBuffer.SetData() NVIDIA FLEX을 활용하여 유체역학을 적용하려고 시도했지만 생각보다 쉽지 않았다. 프로젝트를 실행하고 IsActive를 On/Off를 반복적으로 실행하면 아래와 같은 오류가 나타난다. ArgumentException: ComputeBuffer.SetData() : Accessing 35100 bytes at offset 0 for Compute Buffer of size 35000 bytes is not possible. 이 오류의 해결방법은 __auxFlexDrawFluid.cs 파일의 245번 줄에 해당하는 내용을 수정해야한다. if (m_indexBuffer != null) { m_.. 2020. 11. 6.
[Unity3D] 마우스 클릭 시 UI인지 3D객체 인지 구별 ✔ Unity3D UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject() UI에 가려져있는 3D 오브젝트 객체가 마우스 클릭 시 OnMouseDown()이나 OnMouseUp() 이벤트 콜이 된다. UI인지 판별하는 방법은 간단하다. EventSystem.current에서 현재 클릭한 이벤트에 대한 정보를 확인할 수 있다. public void OnMouseDown() { if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject() == true) return; // do.. } EventSystem.currrent.IsPointerOverGameObject().. 2020. 10. 16.
[Unity3D] 3D오브젝트 공간 정렬 ✔ Unity3D - 오브젝트 공간 자동 정렬 Object Position Sort 공간에 오브젝트를 특정 한 기준점에서 좌우로 정렬하고 싶은 경우에 사용한다. X, Z방향으로 정렬하고 추가, 제거 가능 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ObjectPositionSort : MonoBehaviour { //테스트를 위한 오브젝트 public GameObject testobj; //기준 포지션 public Transform standardPosition; private Vector3 standardVector; //기준포지션안에 관리될 오브젝트들 private List item.. 2020. 9. 21.
[AutoCAD .Net] C# 점과 선 사이의 최단 거리 구하기 ✔ C# - 점과 직선사이의 최단거리 구하기 AutoCAD에서 하나의 라인과 포인트를 선택하고 최단거리를 구하는 함수입니다. Point3d point -> AutoCAD에서 선택된 포인트를 넘겨받음 Point3d lineStartPoint -> AutoCAD에서 선택된 라인의 시작 포인트를 넘겨받음 Point3d lineEndPoint -> AutoCAD에서 선택된 라인의 끝 포인트를 넘겨받음 //직선과 점의 최단 거리를 구하는 함수 private double GetShortestDistance(Point3d point, Point3d lineStartPoint, Point3d lineEndPoint) { //X의 길이, Y의 길이를 계산 double dx = lineEndPoint.X - lineSta.. 2020. 7. 30.
[C#] 클래스 라이브러리(.dll) 프로젝트에서 Winform 사용하기 ✔ C# 클래스 라이브러리 프로젝트에서 윈폼 추가하기 Add Winform in DLL Project 타 프로그램에서 .dll로 읽어들여 기능을 Add-on을 하는 경우가 많다. 단순 프로젝트 생성을 WinForm을 생성하면 빌드시 exe형태로 나오기때문에 활용을 할 수 없다. 클래스 라이브러리 프로젝트를 만들어 Winform을 추가하고 타 프로그램에서 UI로 컨트롤이 가능하도록 만들어야한다. 먼저 클래스 라이브러리 프로젝트를 생성한다. 생성 후 참조에 우클릭을 하여 참조 추가를 누른다. 어셈블리 탭 -> System.Windows.Forms 선택 -> 확인. 이제 폼을 만들자. 프로젝트 우클릭 -> 추가 -> Windows Form ( 추가 -> 새항목 -> Windows Form으로 해도 무관 ) 추.. 2020. 6. 11.
[AutoCAD .Net] UnSelect Obejects In Document ✔ AutoCAD .Net - 선택된 항목 해제, 선택 항목 모두 해제 AutoCAD에서 선택된 항목들을 해제할때 사용되는 코드 아래는 선택된 항목 모두 해제하는 코드입니다. 특정 오브젝트만 해제하고 싶을 경우에는 해당 오브젝트 ID를 제외하고 넣으시면 됩니다. Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Editor ed = acDoc.Editor; //AutoCAD 선택 모두 초기화 ed.SetImpliedSelection(new ObjectId[0]); 2020. 5. 27.
[AutoCAD .Net] Get Selected Objects In Document ✔ AutoCAD .Net C#- DWG 도면에서 선택된 오브젝트들을 불러오기 문자, 라인, 폴리라인 등 타잎별로 가져오기 AutoCAD에서 선택되어있는 항목들을 가져오는 코드입니다. 아래 코드는 선택된 오브젝트에서 문자를 확인하는 코드입니다. 라인이나 폴리라인, 원 등의 다른 Type을 얻고 싶다면 typeof(DBText)항목에서 DBText를 Line, Polyline, Circle 등으로 변경 후 활용하시면 됩니다. using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; private void GetSelectedItems(object s.. 2020. 5. 27.
[Revit .Net] Dynamo Version Upgrade in Revit 레빗 2020을 설치하면 자동적으로 다이나모 2.1 버전이 설치되어있다. 하지만 패키지를 사용할때에 2.1 버전 이상을 요구할경우가 많다. 레빗 안에 실행되는 다이나모의 버전을 업그레이드 하는 방법은 아래 영상에서 나타나있다. https://www.youtube.com/watch?v=wa6W5lWoIL8 2020. 5. 15.