| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: VBA - Auswahl (1283 mal gelesen)
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 12. Sep. 2002 13:45 <-- editieren / zitieren --> Unities abgeben:
Hollo VBA-Spezialisten, folgendes Problem. Ich habe eine Routine programmiert die ähnlich dem MESSEN-Befehl funktioniert, mit dem Unterschied das man einen Anfangspunkt und die Richtung, sowie die Anzahl angeben muß. Es werden wie beim MESSEN-Befehl Blöcke oder Punkte eingesetzt. Nun zu meiner Frage. Beim MESSEN-Befehl kann man danach alle Objekte mit V (vorige) auswählen, bei mir wird nur das letzte ausgewählt. Gibt es da eine möglichkeit die eingesetzten Blöcke oder Punkte auch auf einmal auszuwählen? Danke ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd Cuder Mitglied Selbständig
Beiträge: 692 Registriert: 10.07.2002 AutoCAD 2002/2004/2005 unter Windows 2000 Professional SP3 PIV 3.4GHz 1024MB NVIDIA GeForce FX Go5700
|
erstellt am: 12. Sep. 2002 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Erzeugst du die Objekte im Code oder mit Befehl Messen? Wenn im Code würde ich die Objekte in einem Objekt-Array speichern und am Ende der Erstellung kannst du über das Array darauf zugreifen, oder du startest einen Reactor (objectAdded) und läßt den Reactor die neuen Objekte in einem Array speichern. ------------------ Ing. Bernd Cuder Cad&Co makes CAD easy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 12. Sep. 2002 14:06 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bernd Cuder: Wenn im Code würde ich die Objekte in einem Objekt-Array speichern und am Ende der Erstellung kannst du über das Array darauf zugreifen, oder du startest einen Reactor (objectAdded) und läßt den Reactor die neuen Objekte in einem Array speichern.
Hallo Bernd, ich wußte auf dich kann man zählen. Das mit dem Array ist ein guter Vorschlag, muß ich einmal ausprobieren, wie das mit dem Reactor funktioniert verstehe ich nicht ganz. Ich haffe auch mich klar ausgedrückt zu haben, ich möchte nicht in meiner Routine darauf zugreifen, sondern erst nachher in ACAD. Danke dir auf jeden Fall ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd Cuder Mitglied Selbständig
Beiträge: 692 Registriert: 10.07.2002 AutoCAD 2002/2004/2005 unter Windows 2000 Professional SP3 PIV 3.4GHz 1024MB NVIDIA GeForce FX Go5700
|
erstellt am: 12. Sep. 2002 14:13 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Nacher ist schlecht, aber mit Trick gehts: Dur erzeugst die Objekte, speicherst sie im Array, und am Ende der Routine gibst du sie vom Array in einen neuen Auswahlsatz. Wenn du jetzt in AutoCAD z.B. schieben->vorher eingibst bekommst du deinen Auswahlsatz (da der Letzte) zurück. ------------------ Ing. Bernd Cuder Cad&Co makes CAD easy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd Cuder Mitglied Selbständig
Beiträge: 692 Registriert: 10.07.2002 AutoCAD 2002/2004/2005 unter Windows 2000 Professional SP3 PIV 3.4GHz 1024MB NVIDIA GeForce FX Go5700
|
erstellt am: 12. Sep. 2002 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 12. Sep. 2002 14:22 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bernd Cuder: Das mit dem Array muß natürlich nicht sein, wenn du am Anfang der Routine einen neuen Auswahlsatz erzeugst und die Dinger nacheinander reingibst tuts das auch.
Danke für den Tipp, jetzt ist mir aber ein Stein vom Herzen gefallen, ich hab nämlich gerade nicht viel Zeit, wenn ich aber kein array brauche geht es ein bischen schneller.
------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 12. Sep. 2002 14:41 <-- editieren / zitieren --> Unities abgeben:
Also, jetzt hab ich die Dinger in ein SelectionSet hineingegeben, aber leider nimmt er mir nicht die Punkte sondern das letzte Element das ich vorher verschoben habe. :-( anbei ein Auszug des Codes
Code:
BlElem.Update Set objArray(0) = BlElem SS.AddItems objArray BlElem = Nothing
------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd Cuder Mitglied Selbständig
Beiträge: 692 Registriert: 10.07.2002 AutoCAD 2002/2004/2005 unter Windows 2000 Professional SP3 PIV 3.4GHz 1024MB NVIDIA GeForce FX Go5700
|
erstellt am: 12. Sep. 2002 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
|
Bernd Cuder Mitglied Selbständig
Beiträge: 692 Registriert: 10.07.2002 AutoCAD 2002/2004/2005 unter Windows 2000 Professional SP3 PIV 3.4GHz 1024MB NVIDIA GeForce FX Go5700
|
erstellt am: 12. Sep. 2002 15:54 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Der Trick mit dem Hüftknick: Public Sub Test() Dim ss As AcadSelectionSet Dim Auswahl As AcadSelectionSet Dim objArray(1) As AcadEntity On Error Resume Next Set ss = ThisDrawing.SelectionSets("Auswahl") If Err Then Set ss = ThisDrawing.SelectionSets.Add("Auswahl") ss.Clear On Error GoTo 0 Set Auswahl = CreateSelectionSet("Auswahl") Dim objLine As AcadLine Dim dblPkt1(2) As Double Dim dblPkt2(2) As Double dblPkt1(0) = 0 dblPkt1(1) = 0 dblPkt1(2) = 0 dblPkt2(0) = 5 dblPkt2(1) = 5 dblPkt2(2) = 0 Set objLine = ThisDrawing.ModelSpace.AddLine(dblPkt1, dblPkt2) Set objArray(0) = objLine dblPkt1(0) = 0 dblPkt1(1) = 5 dblPkt1(2) = 0 dblPkt2(0) = 5 dblPkt2(1) = 0 dblPkt2(2) = 0 Set objLine = ThisDrawing.ModelSpace.AddLine(dblPkt1, dblPkt2) ThisDrawing.Application.Update Set objArray(1) = objLine Dim varObj As Variant Dim Xtyp(1) As Integer Dim Xdat(1) As Variant Xtyp(0) = 1001: Xdat(0) = "CCNC_Auswahl" Xtyp(1) = 1000: Xdat(1) = "Auswahl" For Each varObj In objArray varObj.SetXData Xtyp, Xdat Next Xtyp(0) = 1001: Xdat(0) = "CCNC_Auswahl" Xtyp(1) = 1000: Xdat(1) = "" Dim Ftyp(0) As Integer Dim Fdat(0) As Variant Dim P1 As Variant Dim P2 As Variant Ftyp(0) = 1001 Fdat(0) = "CCNC_Auswahl" Auswahl.Select acSelectionSetAll, , , Ftyp, Fdat For Each varObj In Auswahl varObj.SetXData Xtyp, Xdat Next Auswahl.Delete End Sub
------------------ Ing. Bernd Cuder Cad&Co makes CAD easy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd Cuder Mitglied Selbständig
Beiträge: 692 Registriert: 10.07.2002 AutoCAD 2002/2004/2005 unter Windows 2000 Professional SP3 PIV 3.4GHz 1024MB NVIDIA GeForce FX Go5700
|
erstellt am: 12. Sep. 2002 16:02 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Opps, so muß sein: Dim Xtyp() As Integer Dim Xdat() As Variant ReDim Xtyp(1) ReDim Xdat(1) Xtyp(0) = 1001: Xdat(0) = "CCNC_Auswahl" Xtyp(1) = 1000: Xdat(1) = "Auswahl" For Each varObj In objArray varObj.SetXData Xtyp, Xdat Next ReDim Xtyp(0) ReDim Xdat(0) Xtyp(0) = 1001: Xdat(0) = "CCNC_Auswahl" 'Damit Xdata gelöscht werden
------------------ Ing. Bernd Cuder Cad&Co makes CAD easy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 12. Sep. 2002 16:02 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bernd Cuder: Der Trick mit dem Hüftknick:
Hallo Bernd, wie ich sehe kennst du die Seite http://code.acadx.com/ Oder liege ich da falsch? Wenn ja, möchtest du die Funktion die ich geschrieben habe? Ich schicke sie dir per Mail, ist doch etwas umfangreicher, natürlich nur wenn du sie möchtest. Man braucht dafür die VLAX.cls und CURVE.cls. Ich möchte allerdings versuchen das ganze mit der AcadX.arx neu zu programmieren, vielleicht geht das ding dann etwas schneller. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 12. Sep. 2002 16:12 <-- editieren / zitieren --> Unities abgeben:
|
Bernd Cuder Mitglied Selbständig
Beiträge: 692 Registriert: 10.07.2002 AutoCAD 2002/2004/2005 unter Windows 2000 Professional SP3 PIV 3.4GHz 1024MB NVIDIA GeForce FX Go5700
|
erstellt am: 12. Sep. 2002 16:27 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 12. Sep. 2002 16:31 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bernd Cuder:
Das hat mich dann auch verraten bzgl AcadX oder?
Genau das war es, ich verwende genau das gleiche, ich finde die Leute bei AcadX genial, die Funktionen sind auch sehr gelungen. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |