Hei,
Olen rakentamassa automaatio systeemiä CAD/CAM ohjelmaan.
Kyseessä on reikien tunnistus 3d-mallista.
Minulla on eri reikätyypeille luotuna omat luokat (joita on paljon ja hyvin eri tyyppisiä) kuten;
Public Class Portti_G14 Implements IPortti 'Palauttaa True jos reikä mätsää. Public Function Match(Feature As HolesFeature) As Boolean Implements IPortti.Match If Feature.Diameter = 15.6 and _ Feature.BoreDiameter = 22.2 Then Return True Else Return False End If End Function End Class
Lisäksi minulla on tunnistusluokka joka näkyy itse CAD/CAM systeemissä
<Browsable(True)> Public Class AAB_Recognition Inherits ExpressionBase Public Shared Function Match(HoleType As String, Feature As HolesFeature) As Boolean 'Tässä olen aluksi käyttänyt ihan vaan: 'Select Case HoleType ' Case "Portti G1/4" ' Dim p as new Portti_G14 ' Return p.match(feature) ' Case "CAV 06-3" ' Dim p as new CAV_063 ' Return p.match(feature) 'End Select 'Mutta haluaisin simppelimmän keinon kutsua Holetypeä vastaavan luokan Match funtiota kuten esim; Return HoleType_Luokka.Match(Feature) 'Mutta en keksi keinoa kutsua oikeaa luokkaa merkkijonon perusteella End Function End Class
Jos vain voisin jotenkin luoda jonkinlaisen "luettelon" ABB_Recognition luokan alkuun, kuten:
Enum eHoleClass "Portti G1/4" = New Portti_G14 "CAV 06-3" = New CAV_063 End Enum 'Mutta eihän tämä näin toimi...
Siis CAD/CAM ohjelmassa kutsun esim näin Iif(AAB_Recognition.Match("Portti G1/4",Feature),<tee jotain>,<Tee jotain muuta>)
Toivottavasti joku hoksaa mitä tarkoitan. Toki kaikki muutkin ajatukset tuon toteuttamiseen otetaan vastaan...
Jos teet Enumin asemesta Dictionaryn:
Public Shared eHoleObjectByString = New Dictionary(Of String, IPortti) From { {"Portti G1/4", New Portti_G14()}, {"CAV 06-3", New CAV_063()} }
Niin sitten voit käyttää kaipaamallasi tavalla:
Return eHoleObjectByString(holeType).Match(Feature)
Jees, kiitos. Toimii hienosti!
Aihe on jo aika vanha, joten et voi enää vastata siihen.