Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Bogen, Linie, PL Länge Delta

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Bogen, Linie, PL Länge Delta (386 mal gelesen)
otm
Mitglied
Bauingenieur


Sehen Sie sich das Profil von otm an!   Senden Sie eine Private Message an otm  Schreiben Sie einen Gästebucheintrag für otm

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 23. Mrz. 2022 21:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Forum,

ich versuche ein Programm zu schreiben, bei dem ich
- ein Objekt anklicke
- wenn es eine Linie, eine PL oder ein Bogen ist, das Objekt um einen Deltawert zu verlängern bzw. zu verkürzen.

Wie kann ich den Befehl "Länge" "DE" in VBA ausdrücken?

Oder wie kann ich der Zeile

Code:

ThisDrawing.SendCommand "Länge DE " & dblDelta & " "

das vorher vom User angeklickte Objekt und den PickPoint angeben?

------------------
Grüße aus München
Christian

[Diese Nachricht wurde von otm am 23. Mrz. 2022 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rexxitall
Mitglied
Dipl. -Ing. Bau


Sehen Sie sich das Profil von rexxitall an!   Senden Sie eine Private Message an rexxitall  Schreiben Sie einen Gästebucheintrag für rexxitall

Beiträge: 265
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 24. Mrz. 2022 11:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich

Hi,
1. es gibt den ACAD Befehl "_LENGTHEN" Wie der auf deutsch heißt weis ich nicht  Der eigentlich so was macht. (Unterstrich vor dem englischen Kommando und es tut auch im deutschen Autocad)
2. Kannst du SENDCOMMAND das Handle des Entitys mit unterschieben
Siehe:
https://adndevblog.typepad.com/autocad/2012/09/using-object-id-in-sendcommand-method.html
Im Beispiel dort wurde das Ausrunden Kommando benutzt welches zwei Handles / Entitys benutzt. Hier bastelt der ein Handle zusammen:
Dim strEntName1 As String
strEntName1 = "(handent """ & strHandle1 & """)"
(Ob bei dir da bei HANDENT ein Unterstrich vor muss weis ich nicht) Schaden tut er nie.
Diese Konstruktionen führt er dann in der Letzten Zeile aus.
Hat der Gute dort zwar für .NET ausgeführt geht aber nur um die Art und Weise wie der Kommandostring zusammengebastelt wird.
Also Thisdrawing.sendcommand verwenden und nicht das Net API benutzen 

Dim strCommand As String

strCommand="_fillet" + vbCr + "r" + vbCr + "0.495" +                    vbCr + strEntName1 + vbCr + strEntName2 + vbCr

call Thisdrawing.sendcommand(strCommand)

Lieben Gruß

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21424
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 24. Mrz. 2022 12:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich

Nur als Kommentar und Ergänzng.
LENGTHEN ist genau der Befehl um den es in der Anfrage ging, eben der Befehl LÄNGE

-

Handle als Objektangabe
Dem AutoCAD-Befehl sendet man nicht das Handle sondern die ObjectID des Objektes,
genau dafür ist die Funktion HANDENT da,
sie gibt die ObjectID des übergebenen Handle zurück.

Da HandEnt eine Lispfunktion ist steht diese auch in Klammern geschrieben und benötigt keinen Unterstrich(der ist nur für AutoCAD-Befehle/Optionen).

[Diese Nachricht wurde von cadffm am 24. Mrz. 2022 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

otm
Mitglied
Bauingenieur


Sehen Sie sich das Profil von otm an!   Senden Sie eine Private Message an otm  Schreiben Sie einen Gästebucheintrag für otm

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 25. Mrz. 2022 13:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Super.
Genau die Infos, die mir gefehlt haben.
Vielen Dank.

Aber es will noch nicht richtig.

Hier mein Code:

Code:

Sub LengthenX()
    Dim returnObj As AcadObject
    Dim basePnt As Variant
    Dim iKeyCode
   
    On Error Resume Next
   
Retry:
    'Eingabe des Objekts
    ThisDrawing.Utility.GetEntity returnObj, basePnt, "Markierungsobjekt auswählen"
    iKeyCode = GetAsyncKeyState(&H1B)  ' abfragen, ob ESC noch gedrückt wurde!
       
    If Err <> 0 Then
        Err.Clear     'Geklickt, aber nichts gewählt.
        If (iKeyCode And &H1B) = 1 Then 'Abbruch mit Taste "Esc"
            Exit Sub
        Else 'ins Leere geklickt
            GoTo Retry
        End If
    Else
        returnObj.Update
    End If
   
    ' Verlängerung/Verkürzung festlegen
    Dim dblDelta As Double
    'Dieser Wert wird im Original berechnet.
    '....
    dblDelta = 6
  
    Dim strHandle As String
    Dim strEntName As String
    Dim strCommand As String
   
    strHandle = returnObj.handle
    strEntName = "(handent """ & strHandle & """)"
   
    strCommand = "_LENGTHEN" & vbCr & "DE" & vbCr & dblDelta & vbCr & strEntName & vbCr

    Call ThisDrawing.SendCommand(strCommand)

End Sub


Der Befehl Länge wird ausgeführt,
DE wird auch gemacht
und dann wird das objekt (linie) am Startpunkt verlängert, obwohl ich in der Nähe des Endpunkts angeklickt habe.
Ich kann den Pickpoint nirgends übergeben, damit klar ist auf welcher Seite die Linie verlängert werden soll.
Wie geht das?
Ohne diesem Artikel folgen zu müssen.
[URL]
https://forums.autodesk.com/t5/vba/lengthen-in-vba-without-using-sendcommand/td-p/1622493
[/URL]
------------------
Grüße aus München
Christian

[Diese Nachricht wurde von otm am 25. Mrz. 2022 editiert.]

[Diese Nachricht wurde von otm am 25. Mrz. 2022 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2607
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2020
Plateia, Canalis
Visual Basic

erstellt am: 26. Mrz. 2022 12:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich

Hallo Christian,

Darf ich einmal fragen warum Du das Element unbedingt vorher abfragen mußt?
Wie Du schon richtig festgestellt hast kannst Du den PickPoint, der angibt an welchem Ende die Änderung erfolgen soll, nicht übergeben. D.h. entweder Du rufst den Länge-Befehl ohne das Element auf, nur mit Angabe des Deltawertes. Das ist aber Fehleranfällig (falsches Element oder doppelt klicken bevor der Abbruch erfolgt.
Oder Du analysierst das Element selber und schreibst die entsprechenden Unterfunktionen für das gewählte Element. Ist aufwändig wenn man 2D/3D berücksichtigen will evtl. schräg im Raum liegende Elemente hat (Fensterbögen, Durchlässe).
Sollte Dir eine einfache Funktion auf die dargestellte Ebene (Welt) in 2D helfen, könnte ich mal ein altes Programm suchen. Ich denk ich hatte da schon mal etwas geschrieben...

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

otm
Mitglied
Bauingenieur


Sehen Sie sich das Profil von otm an!   Senden Sie eine Private Message an otm  Schreiben Sie einen Gästebucheintrag für otm

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 26. Mrz. 2022 21:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Klaus,

im Layernamen des Elements steckt die Information, aus der man ausrechnen kann, um welches Delta das Element gekürzt bzw. verlängert werden muss.

Mittlerweile habe ich für Linien und Bögen das Kürzen und Längen für alle Fälle fertig.
Nur die PL muss ich mir noch genauer ansehen.
Das Verlängern ist einfach, das Kürzen weiß ich noch nicht, wie ich rangehen soll.
Da ich das alles nur in 2D benötige, sollte das aber auch machbar sein.
Wenn Du dazu einen alten Code hast, würde ich mich sehr freuen.

------------------
Grüße aus München
Christian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rexxitall
Mitglied
Dipl. -Ing. Bau


Sehen Sie sich das Profil von rexxitall an!   Senden Sie eine Private Message an rexxitall  Schreiben Sie einen Gästebucheintrag für rexxitall

Beiträge: 265
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 23. Jul. 2022 00:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich

Generell kann mit xyz.objectname herausbekommen um welche "Sau" es sich handelt. So man das hat bekommt man auch abhängig vom Object die Koordinaten heraus. Aus meiner Erfahrung heraus ist es zielführender und weit schneller die Dinge selber ohne ACAD API zu rechnen. Es ist auch ein genereller Weg. Koordinaten abfragen, verarbeiten, Koordinaten zuweisen. Man *kotzt* zwar zum Anfang im Strahl. Lernt aber später das es so einfacher geht. Insbesondere für andere Probleme. Ich hab mir ein "Get points_from_ENTITY" geschrieben und die Gegenseite "Set_points_to_entity". Alles was danach kommt ist "blöde" Mathematik Und kein Autocad Hexenwerk mehr. Ist auch drastisch schneller .) Ja, ich weis, um die Mathe Nummer kommt man nicht rum  Aber dafür um komische Acad APIS wo kein Mensch weis wie die unter welchen Umständen entstanden sind  Illegale DRogen .. Wir wissen es nicht 

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rexxitall
Mitglied
Dipl. -Ing. Bau


Sehen Sie sich das Profil von rexxitall an!   Senden Sie eine Private Message an rexxitall  Schreiben Sie einen Gästebucheintrag für rexxitall

Beiträge: 265
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 06. Okt. 2022 14:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für otm 10 Unities + Antwort hilfreich

Polylinie ist nicht ganz so einfach. Du musst die Koordinaten der Linie durchlaufen und herausbekommen um welches Segment es sich handelt. Die kann übrigens links oder rechts rum sein... Dann strecken und alle anderen (nachfolgenden) Punkte auch mit dieser Verschiebung beaufschlagen. Ob ein Polygon links oder rechts rum dreht bekommt man mit dem Vorzeichen der Flächenberechnung nach Gauss heraus. Thema Bulgen. Dreht man die Drehrichtung um, müssen die Bulgen angepasst werden. Vorzeichen und ggf. um einestelle verschieben. Lustig sind auch geschlossene Polygone. 2 Fälle. Polygon ist per Autocad geschlossen oder Anfangs und Endpunkt sind gleich. Weiterer Funfact. Autocad kennt 4 Polygontypen plus Faces, Splines... Mit 2 und dreidimensionalen Koordinaten. Wenn man das Fass aufmacht kann man denn auch gleich alles andere schreiben was die Deskler so vergessen haben. Dsuert nen Monat, hab ich hinter mir  Ist aber cool  Polygon aufknacken, Segmente einfügen, Typen umwandeln, links und rechts rum (beeinflusst manche Strichelungen) ... Wenn man da oft mit schafft lohnt das Nachrüsten solcher Funktionen. Polygon ändern im Rechteck, im Polygon. Glaub hab da 20-30 Dinge nachgerüstet. Als erstes aber 2 Routinen schreiben die diese Punkte egal was es ist ausliest und eine die egal was es ist wieder setzt.(type point3d x as double, y as double z as double, bulge as double) Sonst wirst wuschig  Also Array() of point3d erzeugen und füllen.

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz