Chào mừng các bạn đã ghé thăm blog của mình.😄

Mục đích

  • Hôm trước có một bạn hỏi mình về vấn đề này , đó là tại sao dùng List.UniqueItems không thể loại bỏ được các Point trùng năm trong List, mặc dù nó có loại bỏ.Lý do ở đây là Point có một điểm khác Vector so với Point Còn lại .Vậy thì bây giờ vấn đề sẽ xử lí như thế nào ?

Cách xử lý

Cách 1 : Duỗi List sang String với node StringFromObject Và sử dụng lại List.UniqueItems.Nhưng vấn đề ở đây ta sẽ tốn thêm rất nhiều công đoạn cho xử lý phía sau .Vì vậy cách này rườm rà và không hiệu quả cho lắm.

Cách 2 : Sử dụng node Point.PruneDuplicates

Với node này sẽ loại bỏ đi những điểm trùng trong một List đưa vào, vấn đề là các bạn chưa hề biết đến sự tồn tại của node này mà thôi.

image 2020 03 10T04 23 21 789Z

Cách 3 : Viết Scripts tuỳ chỉnh

#Thanks Author Package Springs
import clr
from itertools import groupby
from operator import itemgetter
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import Point
def p2t(p) : return round(p.X,4), round(p.Y,4), round(p.Z,4)
pts = map(p2t, IN[0])
unique_pts = set(pts)
if not IN[1]:
same_z = [(i[:2],i[-1]) for i in unique_pts]
same_z.sort(key = itemgetter(0) )
unique_pts = []
for k, g in groupby(same_z, itemgetter(0) ):
coord = list(k)
coord.append(max([i[-1] for i in g]) )
unique_pts.append(coord)
OUT = [Point.ByCoordinates(*i) for i in unique_pts]

Mở rộng

Có một câu hỏi mở rộng rất hay là nếu có một đám danh sách dãy số trùng muốn lấy ra những số không trùng nhau thì làm thế nào?Cũng không có mấy đâu minh sẽ chỉ bạn 3 cách để lấy ra luôn.Ví dụ mình sẽ làm cho một danh sách các số như này nhé và ta sẽ it ra mỗi dòng với mỗi cách lọc khác nhau, bạn muốn sài cách nào cũng được.

RemoveitemLst

Tổng kết

Hôm nay là một ngày đẹp trời, bệnh dịch Corona đang hoành hành, các bạn hãy bảo trọng sức khoẻ và tránh ra đường tiếp xúc, rửa tay thường xuyên nhé.Cám ơn các bạn đã ghé thăm blog của mình .