Ik zag dit artiekel:
http://through-the-interface.typepad.com/through_the_interface/2008/10/implementing-a.html
Heeft iemand hier een .dll van gemaakt, en zo ja, wil je het delen?
Ik heb geen verstand van C# (ik heb alleen VB.NET geïnstalleerd)
Eddy,
Kijk eens naar
http://www.developerfusion.com/tools/convert/csharp-to-vb/ (http://www.developerfusion.com/tools/convert/csharp-to-vb/)
kun je de code van C# naar vb.net en vice versa omzetten
En nog een ander post over het aanmaken custom snaps (ook in C#)
http://drive-cad-with-code.blogspot.nl/2013/07/customzing-object-snap-pull-all.html (http://drive-cad-with-code.blogspot.nl/2013/07/customzing-object-snap-pull-all.html)
Op deze blog staan nog meer leuke code samples.
groeten
stephan
Bedankt ik ga er naar kijken.
Ik laat nog wat horen.
Eddy,
Gezien de hoeveelheid code die je online kan terugvinden in C#, zou ik in jouw plaats toch opteren om eventueel C# ook te installeren voor je Visual Studio.
In een solution kan je namelijk beide gaan mengen, mits inachtname van een aantal zaken.
Als je wat technisch aangelegd bent - en daar ga ik van uit - dan kan je kleine aanpassingen wel doen EN zo leer je mogelijk ook wat C# on-the-job.
Laat gerust weten mocht je alsnog die DLL an sich willen.
Zeg ook welke versie van AutoCAD je gebruikt en of het 32/64 bit is.
Gr.
winnes
Citaat van: winnes op vr 20 09 2013, 15:26:53
Eddy,
Gezien de hoeveelheid code die je online kan terugvinden in C#, zou ik in jouw plaats toch opteren om eventueel C# ook te installeren voor je Visual Studio.
In een solution kan je namelijk beide gaan mengen, mits inachtname van een aantal zaken.
Als je wat technisch aangelegd bent - en daar ga ik van uit - dan kan je kleine aanpassingen wel doen EN zo leer je mogelijk ook wat C# on-the-job.
Laat gerust weten mocht je alsnog die DLL an sich willen.
Zeg ook welke versie van AutoCAD je gebruikt en of het 32/64 bit is.
Gr.
winnes
Ik ben nog niet zo heel erg bekend met VB.NET (echt een beginner dus)
Dus als je 'm wil maken dan kan ik daar mee aan de slag.
Ik gebruik Acad 2010 x64 en Acad 2013 x64.
Ik heb de code met http://www.developerfusion.com/tools/convert/csharp-to-vb/ om gezet maar dat geeft gelijk de vraag waar moet ik de code plaatsen.
Als je het in VB.NET project doet, mag ik dan dat project ook hebben dan kan ik door de code heen proberen te lezen.
Ik gebruik Visual studio 2010 Express VB.NET.
Wat een toppers hebben we toch op dit forum! :vreegoe: :icon_wub: :pintje:
P.S. Ik heb het ISO bestand voor installatie net gedownload. Nu nog eerst branden en dan kijken of de installatie wil lukken met VS-C#.NET
Ik heb me de moeite genomen om Visual Studio C# Express te installeren.
En de code te plakken, references toe te voegen.
En warempel... het werkt.
Bij gevoegd het Custom_Osnap.dll
Werking (Alleen met Acad 2013 getest):
Type NETLOAD... zoek het bestand en laad het.
Dat is het!
Nu beschik je ook over de custom snap -> Als je snapt op een kwart van bv een lijn zie je nu "(¼)".
Bron can de code:
http://through-the-interface.typepad.com/through_the_interface/2008/10/implementing-a.html
Eddy,
Ik neem aan dat je dze site al kent
http://usa.autodesk.com/adsk/servlet/index?id=18162650&siteID=123112 (http://usa.autodesk.com/adsk/servlet/index?id=18162650&siteID=123112)
staan nog wat tips en tricks hoe je met vb.net /C# binnen autocad kunt werken
groeten
stephan
Citaat van: sschevers op di 24 09 2013, 14:53:37
Eddy,
Ik neem aan dat je dze site al kent
http://usa.autodesk.com/adsk/servlet/index?id=18162650&siteID=123112 (http://usa.autodesk.com/adsk/servlet/index?id=18162650&siteID=123112)
staan nog wat tips en tricks hoe je met vb.net /C# binnen autocad kunt werken
groeten
stephan
Yup, die ken ik al.
Bedankt.
Met de vertaling van de Custom_Snap van C# naar VB kom ik dit tegen:
Het gaat om de vertaalde regel in rood:
CiteerPublic Sub Initialize() Implements IExtensionApplication.Initialize
' Register custom osnap on initialize
_mode = New CustomObjectSnapMode("Quarter", "Quarter", "Quarter of length", _glyph)
CiteerError 1 Reference required to assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' containing the type 'System.Drawing.Bitmap'. Add one to your project.
:vraagteken: Hoe moet ik dit oplossen?
Hieronder de hele code:
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports AcGi = Autodesk.AutoCAD.GraphicsInterface
<Assembly: ExtensionApplication(GetType(OsnapApp.CustomOSnapApp))>
Namespace OsnapApp
' Register and unregister custom osnap
Public Class CustomOSnapApp
Implements IExtensionApplication
Private _info As New QuarterOsnapInfo()
Private _glyph As New QuarterGlyph()
Private _mode As CustomObjectSnapMode
Public Sub Initialize() Implements IExtensionApplication.Initialize
' Register custom osnap on initialize
_mode = New CustomObjectSnapMode("Quarter", "Quarter", "Quarter of length", _glyph)
' Which kind of entity will use the osnap
_mode.ApplyToEntityType(RXObject.GetClass(GetType(Polyline)), New AddObjectSnapInfo(AddressOf _info.SnapInfoPolyline))
_mode.ApplyToEntityType(RXObject.GetClass(GetType(Curve)), New AddObjectSnapInfo(AddressOf _info.SnapInfoCurve))
_mode.ApplyToEntityType(RXObject.GetClass(GetType(Entity)), New AddObjectSnapInfo(AddressOf _info.SnapInfoEntity))
' Activate the osnap
CustomObjectSnapMode.Activate("_Quarter")
End Sub
' Unregister custom osnap on terminate
Public Sub Terminate() Implements IExtensionApplication.Terminate
CustomObjectSnapMode.Deactivate("_Quarter")
End Sub
End Class
' Create new quarter object snap
Public Class QuarterGlyph
Inherits AcGi.Glyph
Private _pt As Point3d
Public Overrides Sub SetLocation(ByVal point As Point3d)
_pt = point
End Sub
Protected Overrides Sub SubViewportDraw(ByVal vd As AcGi.ViewportDraw)
Dim glyphPixels As Integer = CustomObjectSnapMode.GlyphSize
Dim glyphSize As Point2d = vd.Viewport.GetNumPixelsInUnitSquare(_pt)
' Calculate the size of the glyph in WCS
' (use for text height factor)
' We'll add 20% to the size, as otherwise
' it looks a little too small
Dim glyphHeight As Double = (glyphPixels / glyphSize.Y) * 1.2
Dim text As String = "¼"
' Translate the X-axis of the DCS to WCS
' (for the text direction) and the snap
' point itself (for the text location)
Dim e2w As Matrix3d = vd.Viewport.EyeToWorldTransform
Dim dir As Vector3d = Vector3d.XAxis.TransformBy(e2w)
Dim pt As Point3d = _pt.TransformBy(e2w)
' Draw the centered text representing the glyph
vd.Geometry.Text(pt, vd.Viewport.ViewDirection, dir, glyphHeight, 1, 0, _
text)
End Sub
End Class
' OSnap info
Public Class QuarterOsnapInfo
Public Sub SnapInfoEntity(ByVal context As ObjectSnapContext, ByVal result As ObjectSnapInfo)
' Nothing here
End Sub
Public Sub SnapInfoCurve(ByVal context As ObjectSnapContext, ByVal result As ObjectSnapInfo)
' For any curve
Dim cv As Curve = TryCast(context.PickedObject, Curve)
If cv Is Nothing Then
Return
End If
Dim startParam As Double = cv.StartParam
Dim endParam As Double = cv.EndParam
' Add osnap at first quarter
Dim param As Double = startParam + ((endParam - startParam) * 0.25)
Dim pt As Point3d = cv.GetPointAtParameter(param)
result.SnapPoints.Add(pt)
' Add osnap at third quarter
param = startParam + ((endParam - startParam) * 0.75)
pt = cv.GetPointAtParameter(param)
result.SnapPoints.Add(pt)
If cv.Closed Then
pt = cv.StartPoint
result.SnapPoints.Add(pt)
End If
End Sub
Public Sub SnapInfoPolyline(ByVal context As ObjectSnapContext, ByVal result As ObjectSnapInfo)
' For polylines
Dim pl As Polyline = TryCast(context.PickedObject, Polyline)
If pl Is Nothing Then
Return
End If
' Get the overall start and end parameters
Dim plStartParam As Double = pl.StartParam
Dim plEndParam As Double = pl.EndParam
' Get the local
Dim startParam As Double = plStartParam
Dim endParam As Double = startParam + 1.0
While endParam <= plEndParam
' Calculate the snap point per vertex...
' Add osnap at first quarter
Dim param As Double = startParam + ((endParam - startParam) * 0.25)
Dim pt As Point3d = pl.GetPointAtParameter(param)
result.SnapPoints.Add(pt)
' Add osnap at third quarter
param = startParam + ((endParam - startParam) * 0.75)
pt = pl.GetPointAtParameter(param)
result.SnapPoints.Add(pt)
startParam = endParam
endParam += 1.0
End While
End Sub
End Class
End Namespace
Eddy,
Heb je de referenties naar de de AcDbMgd.dll en Acmdg. dll (letop copy local op false zetten) in je project toegevoegd?
stephan
Citaat van: sschevers op vr 27 09 2013, 08:50:19
Eddy,
Heb je de referenties naar de de AcDbMgd.dll en Acmdg. dll (letop copy local op false zetten) in je project toegevoegd?
stephan
Ja, deze staan idd zo ingesteld.
Ik maak gebruik van de ObjectARX 2013 template.
Daar is dit vooraf ingesteld.
Zie afbeeldingen.
Eddy,
Ik heb net snel naar je probleem gekeken. Je moet (zoals de foutmelding als al aan geeft) nog een referentie leggen naar System.Drawing aanleggen en je bent je foutmelding kwijt.
In de bjlage vind je het project wat snel gemaakt hebt met de correcte verwijzingen. Let op: Ik werk nog met autocad Map 2012. Je moet je paden naar dus even aanpassen. Ook voor het debuggen moet je het pad aanpassen naar jouw autocad omgeving
stephan
Citaat van: sschevers op vr 27 09 2013, 13:55:43
Eddy,
Ik heb net snel naar je probleem gekeken. Je moet (zoals de foutmelding als al aan geeft) nog een referentie leggen naar System.Drawing aanleggen en je bent je foutmelding kwijt.
stephan
Ik moest inderdaad deze referentie toevoegen:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll
Geen fout meer en een werkende .dll :vreegoe:
Wel vreemd dat het niet moet met C#. Daar werkt het gelijk zonder de code e.d. aan te passen.