| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: .net to JIG an Object (1262 mal gelesen)
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 28. Okt. 2008 14:57 <-- editieren / zitieren --> Unities abgeben:
Im Internet habe ich folgenden Code gefunden Code: Imports System Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.Geometry Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.GraphicsInterface Imports Autodesk.AutoCAD.ApplicationServices 'New class derrived from the DrawJig class Public Class JigExample Inherits DrawJig Private previousCursorPosition As Point3d Private currentCursorPosition As Point3d Private entityToDrag As Entity Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor <CommandMethod("GetMyPoint")> _ Public Sub StartJig() 'Initialize cursor position 'Use the geometry library to create a new 3d point object previousCursorPosition = New Point3d(0, 0, 0) entityToDrag = New Circle(New Point3d(0, 0, 0), New Vector3d(0, 0, 1), 1) Application.DocumentManager.MdiActiveDocument.Editor.Drag(Me) End Sub 'You must override this method Protected Overloads Overrides Function Sampler(ByVal prompts As JigPrompts) As SamplerStatus 'Get the current cursor position Dim jigOpts As New JigPromptPointOptions() jigOpts.UserInputControls = (UserInputControls.Accept3dCoordinates Or UserInputControls.NoZeroResponseAccepted Or UserInputControls.NoNegativeResponseAccepted) jigOpts.Message = "" & Chr(10) & "Enter insert point: " Dim userFeedback As PromptPointResult = prompts.AcquirePoint(jigOpts) currentCursorPosition = userFeedback.Value If CursorHasMoved() Then 'Get the vector of the move Dim displacementVector As Vector3d = previousCursorPosition.GetVectorTo(currentCursorPosition) entityToDrag.TransformBy(Matrix3d.Displacement(displacementVector)) 'Save the cursor position previousCursorPosition = currentCursorPosition Return SamplerStatus.OK Else Return SamplerStatus.NoChange End If End Function Dim JJ As Integer 'You must override this method Protected Overloads Overrides Function WorldDraw(ByVal draw As WorldDraw) As Boolean draw.Geometry.Draw(entityToDrag) Return True End Function Private Function CursorHasMoved() As Boolean Return Not (currentCursorPosition = previousCursorPosition) End Function End Class
Der funktioniert auch soweit, und so halbwegs verstehe ich das auch Ich möchte das jedoch auf ein LispBefehl umbauen (<LispFunction("GetMyPoint")> anstatt <CommandMethod("GetMyPoint")> ) deren Übergabeparameter erstens ein in der Zeichnung existierendes Objekt ist (Elementname/Vlax-Objekt egal), und zweitens der anzuzeigende Text Rückgabe soll sein der gewählte Punkt oder NIL Leider habe ich in der .NET Programmierung absolut keine Ahnung. Darum bitte ich Euch um Hilfe. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 28. Okt. 2008 15:14 <-- editieren / zitieren -->
Hi, wieso verwendest Du nicht einfach (command "_move" ....)? Die JIG-Technik dient in der Regel der Objektveränderung und/oder Erstellung. So wie ich das Beispiel (überfliegend) interpretiere, macht das aber nichts anderes als '_move' (wenn Du ein bestehendes Objekt übergibst). Vielleicht gibt es noch Hintergrundinfo, was damit gemacht werden soll + einfacher waere (wenn ich das bearbeiten soll), dass ich das ganze Projekt bekomme (sln, vb, ...) als zip uploaden, dann erspare ich mir (ersparen wir uns) die Projekteinrichtung. - alfred - [Diese Nachricht wurde von a.n. am 28. Okt. 2008 editiert.] |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 29. Okt. 2008 11:26 <-- editieren / zitieren --> Unities abgeben:
Danke erstmals für Deine Bereitschaft. Ich habe es jetzt selber soweit zusammengebracht. Natürlich hätte ich es auch mittels (command "._move" ... machen können. (das ist auch mehr oder wenigher die jetzt funktionierende Version) Aber in der Endausbaustufe soll das Ding etwas mehr können. Z.B.: je nach überfahrenden bestehenden CAD-Objekt soll sich z.B.: das gejiggte Teil ändern. Z.B.: ich füge einen Anbautisch ein. Dieser soll am Fadenkreuz hängen. Fahre ich nun über einen passenden Tisch auf der linken Seite, so soll der Anbautisch automatisch ein linker werden und umgekehrt. die anzuzeigenhden Grafiken werden in einer externen Zeichnung als Blöcke verwaltet. Ist aber noch ein langer Weg. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 29. Okt. 2008 12:27 <-- editieren / zitieren -->
Hi, dann hast Du ja noch einiges vor Dir, pass auf, wenn du das Element während des JIG's austauscht, dass du immer aus der Sampler-Schleife rauskommst, denn die Geometrie währenddessen zu tauschen bringt Dir Schwierigkeiten ohne Ende (zumindest hatte ich Crash's, als ich das versuchte). Ich nehme an, das ist auch der Grund, wieso es in .net von Autodesk aus noch keine Applikationsspezifischen Elemente gibt. Viel Erfolg, - alfred - |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 29. Okt. 2008 12:48 <-- editieren / zitieren --> Unities abgeben:
das ganze soll auch noch weiters so funktionieren. Den einzelnen Möbel sind Anknüpfpunkte zugewiesen (Datenbank) Haben jetzt das einzufügende Möbel und das bestehende Möbel gleiche Anknüpfpunkte, so soll das einzufügende dabei automatisch hinsnappen. Bewege ich den Vursor jedoch weiter auf einen anderen Tisch, so soll das einzufügende wiederum zum passendden Anknüpfpunkt des neuen Tisches snappen. So stelle ich mir das vor. Naja momentan habe ich eh eine funktionierende (allerdings nicht so schöne) Version, und das wäre halt ein richtiges (aber sehr hochgestecktes) Lernobjekt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|