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 ClassLisä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.