| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | Exklusives EDU-Programm für RTX PRO Blackwell, eine Pressemitteilung
|
Autor
|
Thema: Befehl von Werkzeugpalette (772 mal gelesen)
|
Boehri Mitglied

 Beiträge: 80 Registriert: 07.04.2008
|
erstellt am: 17. Jan. 2011 08:23 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich möchte folgendes realisieren. Über eine Palette einen dynamischen Block einfügen ( Heizungsarmatur ). Den Einfüge-Code kriege ich schon hin. Meine Frage: wie kann ich den Code von der Werkzeugpalette aufrufen und als Vaiable einen Blocknamen Übergeben. mit Lisp geht das doch über C^C(progn(setq ..... oder so ähnlich. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 17. Jan. 2011 08:35 <-- editieren / zitieren -->
Hi, >> wie kann ich den Code von der Werkzeugpalette aufrufen und als Vaiable einen Blocknamen Übergeben. Du rufst Deinen (dotNET-)Befehl genauso auf wie den _INSERT-Befehl und gibst den Blocknamen genauso an, wie Du einen Parameter in AutoCAD angibst. Schreibst Du für AutoCAD im Menü z.B. ^C^C_INSERT;SchraubenBlock; ....oder auch.... ^C^C(command "_INSERT" "SchraubenBlock") Dann kannst Du zum Aufruf Deiner Funktion (ich nehme den Namen myINSERT mal an): ^C^CmyINSERT;SchraubenBlock; Innerhalb Deines Codes musst Du halt 'nur' einen String abfragen (für den Blocknamen): Code: Dim tAcadDoc As Autodesk.AutoCAD.ApplicationServices.Document = Nothing Try tAcadDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument Dim tInputRes As EditorInput.PromptResult = tAcadDoc.Editor.GetString("Blockname: ") If tInputRes.Status = EditorInput.PromptStatus.OK AndAlso (tInputRes.StringResult.Length > 0) Then Dim tBlName As String = tInputRes.StringResult Else 'Fehlerausgabe, wenn notwendig End If [.....]
Alternativ kannst Du auch LISP-Funktionen in dotNET schreiben, ist ein wenig anders strukturiert, da kannst Du Parameter direkt mitgeben (und in Deiner LISP-Funktionserweiterung im Header deklarieren). Braucht nur ein wenig mehr Code als ein Befehlsaufruf, ginge aber auch.
- alfred - ------------------ www.hollaus.at |
Boehri Mitglied

 Beiträge: 80 Registriert: 07.04.2008
|
erstellt am: 17. Jan. 2011 10:10 <-- editieren / zitieren --> Unities abgeben:         
Hallo Alfred, vielen Dank für die schnelle Antwort und den Tip mit der Lispfuntion. Meinst du das so?
Code:
<LispFunction("IB")> _ Public Sub Insert_Block(ByVal rbArgs As ResultBuffer) Dim blockname As String = "" If Not rbArgs = Nothing Then For Each rb As TypedValue In rbArgs If (rb.TypeCode = Autodesk.AutoCAD.Runtime.LispDataType.Text) Then blockname = rb.Value.ToString() End If Next End If
es funktioniert zumindest :-) Nochmals vielen Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Ex-Mitglied
|
erstellt am: 17. Jan. 2011 10:14 <-- editieren / zitieren -->
Hi, >> Meinst du das so? >> [...] >> es funktioniert zumindest :-)Na wenn's funktioniert, dann ist dem ja nichts mehr hinzuzufügen. - alfred - ------------------ www.hollaus.at |