Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  zusatzinformation polylinien

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:  zusatzinformation polylinien (1713 mal gelesen)
ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 06. Nov. 2018 11: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

hallo zusammen!
ich habe folgende frage:
ist es möglich zu einzelnen segmenten einer polylinie zusatzinformationen (text und/oder zahl) zu speichern?

lg, ritchie

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 06. Nov. 2018 11:22    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 ritchie1 10 Unities + Antwort hilfreich

Mißbrauch ne Bemaßung ?

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 06. Nov. 2018 11:24    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 ritchie1 10 Unities + Antwort hilfreich

Wenn die Polylinie einzelne Segemente hat, dann ja (POLYLINE Objekt),
ansonsten müßte man es dem LwPolylinienobjekt anhängen und dazu notieren auf welches Segement es sich bezieht.

Erweiterte Daten / XData -> Klick

Und in allen Fällen: Immer ein Programm/Eventhandler mitlaufen lassen damit man auf Änderungen reagieren kann!?

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: 2624
Registriert: 02.05.2006

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

erstellt am: 06. Nov. 2018 12:51    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 ritchie1 10 Unities + Antwort hilfreich

Hallo Ritchie,

Füll doch mal Deine Systeminformationen aus, dann wissen andere auch mit was Du arbeitest.

Wie cadffm schon schrieb gibt es die allgemeine Möglichkeit der XDATA, Nachteil davon ist dass man nicht ohne weiteres Zugriff darauf hat.

Etwas komplizierter zum programmieren aber für den User einfacher zu handhaben sind Objektdaten wenn Dir MAP zur Verfügung steht (=> Systeminfo), denn diese kann man direkt in der Eigenschaftspalette editieren.

Grüße
Klaus 

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

ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 06. Nov. 2018 13:43    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!

@CADmium
dient zum festlegen der Kantenausführung bei Holzplatten.

@cadffm
ja die polylinie besteht aus segmenten. im LWPolyline Object hab ich keine eigenschaft gefunden wo man zu den segmenten informationen speichern kann.
XData ist kein problem, aber wie ordne ich die XData einen einzelnen segment einer polylinie zu?
Was meinst du mit Programm/Eventhandler mitlaufen lassen?

@KlaK
Systeminformation ist ausgefüllt. Zugriff mit XData hab ich schon mal gemacht, das sollte ich eigentlich schaffen. die zuweisung an die einzelne segmente einer polylinie ist mein problem. MAP habe ich nicht.

lg ritchie

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: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 06. Nov. 2018 13:50    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 ritchie1 10 Unities + Antwort hilfreich

Eine LWPOLYLINE besteht nicht aus einzelnen Objekten(alles ein Objekt),
dies ist nur bei einer komplexen POLYLINE der Fall, diese ist ist ein wenig vergleichbar mit
einem Block: Header, einzelne Objekte (DXF: Vertex) und ein End-Objekt (DXF seqend).

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: 266
Registriert: 07.06.2013

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

erstellt am: 06. Nov. 2018 16:30    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 ritchie1 10 Unities + Antwort hilfreich

Hi
Ja natürlich kann man das, wenn auch mit gelindem Aufwand 
Man kann jede gewünschte Information als XDATA oder Extended Dictionary an JEDES Autocad Element anhängen.
In deinem Falle ist es nur ne Frage wie du die Daten organisierst.
Ich würde mir das wie ne Excel Tabelle Vorstellen mitjedem Segment als Zeile und den Daten als Spaltenüberschriften.
Eine sehr einfache Möglichkeit ist, diese Datensätze im CSV oder besser TSV Format in einem String vorzuhalten.
Das lässt sich sehr einfach erzeugen und genauso einfach wieder in Datensätze zerlegen.
XDATAS haben die unangenehme Eigenschaft das Audit lange Datenblöcke nicht in der Zeichnung belässt.
Sie eignen sich somit nur für sowas wie "Positionsnummern"  . Immerhin kann man nach ihnen mit nem Selectionset suchen.
Den CSV String würde ich demzufolge einem Dictionary anvertrauen.

Der Haken n dieser Lösung ist lediglich, das wenn die Polylinie gelöscht wird die Daten futsch sind. Oder falls man sie kopiert doppelt vorhanden sind.
Das Spiel kann man aber auch mit der DWG selbst machen. Sprich die gesamte Datenbank per dictionary in oder an die Zeichnung kleben. Das wird mit abgespeichert.

Meine Vorgehensweise st dabei
Tabellen mit VBCR, Zeilen mit VBLF und Spalten mit vbtab zu separieren.
Jetzt muss man nur noch die Polylinien verazten.
Ich benutze hierzu GUIDS. Handles sind nicht das Mittel der Wahl, da auch die sich verändern können. Die sind in diesem Universum lt. Microsoft einzigartig...
Eignen sich also hervorragend dazu um per extended Dictionary an die Polylinie geklebt zu werden.

Nun müssen wir nur noch ne Möglichkeit schaffen, diese besonderen Polylinien in der Zeichnung zu finden.
Das würde ich mit XDATAs Machen.
EInmal einen APPNAMEN für deine Anwenung erzeugen und einmal ANWENDUNGSNAME verkettet mit GUID.
Dann kann man die schön danach auswählen.
Da das ganze nicht so ganz trivial ist hab ich ein paar Routinen beigefügt.
Lieben Gruß


#If Win64 Then

    Private Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" (pGuid As GUID) As Long
    Private Declare PtrSafe Function StringFromGUID2 Lib "ole32.dll" (rguid As Any, ByVal lpstrClsId As Long, ByVal cbMax As Long) As Long
    Private Declare PtrSafe Function IIDFromString Lib "ole32.dll" (ByVal lpsz As String, ByVal lpiid As Long) As Long

#Else

    Private Declare Function CoCreateGuid Lib "ole32.dll" (pGuid As GUID) As Long
    Private Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As Any, ByVal lpstrClsId As Long, ByVal cbMax As Long) As Long
    Private Declare Function IIDFromString Lib "ole32.dll" (ByVal lpsz As String, ByVal lpiid As Long) As Long

#End If

'Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As Long

Public Function NewGUID(Optional braces As Boolean = True) As String
  Dim uid As GUID
  Dim i As Long
  CoCreateGuid uid

  NewGUID = _
  hex0(uid.data1, 8) & "-" & _
  hex0(uid.data2, 4) & "-" & _
  hex0(uid.data3, 4) & "-" & _
  hex0(uid.data4(0), 2) & _
  hex0(uid.data4(1), 2) & "-"
  For i = 2 To 7
    NewGUID = NewGUID & hex0(uid.data4(i), 2)
  Next
  If braces Then
  NewGUID = "{" & NewGUID & "}"
  End If
End Function

Private Function hex0(N, digits As Integer) As String
  hex0 = Hex(N)
  hex0 = String(digits - Len(hex0), "0") & hex0
End Function

Function XDATA_Set(appName As String, entXd As Object, xdStr As String) As Boolean
    XDATA_Set = False
    Dim xdataType(0 To 1) As Integer
    Dim xdata(0 To 1) As Variant
    On Error Resume Next: ERR.Clear: xdataType(0) = 1001: xdataType(1) = 1000: xdata(0) = appName: xdata(1) = xdStr: entXd.SetXData xdataType, xdata: On Error GoTo 0
    If ERR.Number = 0 Then XDATA_Set = True

End Function
Function XDATA_Del(appName As String, entXd As Object) As Boolean
    XDATA_Del = False
    Dim xdataType(0 To 0) As Integer
    Dim xdata(0 To 0) As Variant
    On Error Resume Next: ERR.Clear: xdataType(0) = 1001: xdata(0) = appName: entXd.SetXData xdataType, xdata: On Error GoTo 0
    If ERR.Number = 0 Then XDATA_Del = True

End Function

Function XDATA_Get(appName As String, entity As Object, S As String) As Boolean
    XDATA_Get = False
    Dim xdataType As Variant
    Dim xdata As Variant
    On Error Resume Next
    ERR.Clear
    entity.GetXData appName, xdataType, xdata
    S = xdata(1)
    On Error GoTo 0
    If ERR.Number = 0 Then XDATA_Get = True
End Function


Function Entity_Set_EXT(entity As Object, TAG As String, value As String) As Boolean
    Entity_Set_EXT = False
    Dim dict As AcadDictionary
    Dim RECORD As AcadXRecord
    Const TYPE_STRING = 1

    On Error Resume Next
    Set dict = entity.GetExtensionDictionary
   
    ERR.Clear
    Set RECORD = dict.GetObject(TAG)
    If ERR.Number <> 0 Then
        Set RECORD = dict.AddXRecord(TAG)
    End If
   
   
    On Error GoTo ulos
    RECORD.TranslateIDs = True
    ERR.Clear
    ArraySize = 0
    Dim XRecordDataType As Variant
    Dim XRecordData As Variant
    ReDim XRecordDataType(0 To ArraySize) As Integer
    ReDim XRecordData(0 To ArraySize) As Variant
    XRecordDataType(0) = 1000
    XRecordData(0) = value
    Call RECORD.SetXRecordData(XRecordDataType, XRecordData)

    'RECORD.GetXRecordData XRecordDataType, XRecordData
    If ERR.Number = 0 Then Entity_Set_EXT = True
ulos:
End Function
Function Entity_Get_EXT(entity As Object, TAG As String, value As String) As Boolean
    Entity_Get_EXT = False
    Dim dict As AcadDictionary
    Dim RECORD As AcadXRecord
    ArraySize = 0
    Dim XRecordDataType As Variant
    Dim XRecordData As Variant
  On Error GoTo ulos
  If entity.HASEXTENSIONDICTIONARY Then
        ERR.Clear
        On Error Resume Next
        Set dict = entity.GetExtensionDictionary
        Set RECORD = dict.GetObject(TAG)
        RECORD.GetXRecordData XRecordDataType, XRecordData
        value = XRecordData(0)
        On Error GoTo 0
        If ERR.Number = 0 Then Entity_Get_EXT = True
    End If
ulos:
End Function
Public Function DWG_SET_XENTRY(DNAME As String, DTAG As String, ID, ENTRY) As Boolean
    DWG_SET_XENTRY = False
    Dim oDict As AcadDictionary
    Dim oXRec As AcadXRecord
   
    Dim N As Long
    Dim dxfCode() As Integer
    Dim dxfdata()
    N = 0
    On Error Resume Next
    ERR.Clear
    Set oDict = thisdrawing.Dictionaries.ITEM(DNAME)
   
    If ERR.Number <> 0 Then
        ERR.Clear
        Set oDict = thisdrawing.Dictionaries.Add(DNAME)
        ERR.Clear
        Set oDict = thisdrawing.Dictionaries.ITEM(DNAME)
        If ERR.Number <> 0 Then
        Debug.Print ERR.DESCRIPTION
        Exit Function
        End If
    End If
   
    ERR.Clear
    Set oXRec = oDict.ITEM(DTAG)
   
    If ERR.Number <> 0 Then
        ERR.Clear
        Set oXRec = oDict.AddXRecord(DTAG)
        Debug.Print ERR.DESCRIPTION
        ERR.Clear
        Set oXRec = oDict.ITEM(DTAG)
        If ERR.Number <> 0 Then
     
        Exit Function
        End If
    End If
   
   
    On Error GoTo 0 'Resume Next
    ERR.Clear
   
    oXRec.GetXRecordData dxfCode, dxfdata
   
    On Error Resume Next
    Debug.Print dxfdata(0)
    N = UBound(dxfdat)
    If ID >= N Then
        ReDim Preserve dxfCode(ID)
        ReDim Preserve dxfdata(ID)
        For i = N To ID
            dxfCode(ID) = 1
        Next
    End If
    ERR.Clear
    dxfCode(ID) = 1
    dxfdata(ID) = ENTRY
    oXRec.SetXRecordData dxfCode(), dxfdata()
   
    If ERR.Number <> 0 Then
    Debug.Print ERR.DESCRIPTION
    Exit Function
    End If
    DWG_SET_XENTRY = True
End Function


Public Function DWG_SET_XENTRY_ALL(DNAME As String, DTAG As String, DATA) As Boolean
    DWG_SET_XENTRY_ALL = False
    Dim oDict As AcadDictionary
    Dim oXRec As AcadXRecord
   
    Dim N As Long
    Dim dxfCode() As Integer
    Dim dxfdata()
    N = 0
    On Error Resume Next
    ERR.Clear
    Set oDict = thisdrawing.Dictionaries.ITEM(DNAME)
   
    If ERR.Number <> 0 Then
        ERR.Clear
        Set oDict = thisdrawing.Dictionaries.Add(DNAME)
        ERR.Clear
        Set oDict = thisdrawing.Dictionaries.ITEM(DNAME)
        If ERR.Number <> 0 Then
            Debug.Print ERR.DESCRIPTION
            Exit Function
        End If
    End If
   
    ERR.Clear
    Set oXRec = oDict.ITEM(DTAG)
   
    If ERR.Number <> 0 Then
        ERR.Clear
        Set oXRec = oDict.AddXRecord(DTAG)
        Debug.Print ERR.DESCRIPTION
        ERR.Clear
        Set oXRec = oDict.ITEM(DTAG)
        If ERR.Number <> 0 Then
     
            Exit Function
        End If
    End If
   
   
    On Error GoTo 0 'Resume Next
    ERR.Clear
   
    N = UBound(DATA)
   
    ReDim dxfCode(ID)
    ReDim dxfdata(ID)
   
    For i = N To ID
        dxfCode(i) = 1
        dxfdata(i) = DATA(i)
    Next

    ERR.Clear
    oXRec.SetXRecordData dxfCode(), dxfdata()
    If ERR.Number <> 0 Then
        Debug.Print ERR.DESCRIPTION
        Exit Function
    End If
    DWG_SET_XENTRY_ALL = True
End Function

Public Function DWG_GET_XENTRY(DNAME As String, DTAG As String, ID, DATA) As Boolean
    DWG_GET_XENTRY = False
    Dim oDict As AcadDictionary
    Dim oXRec As AcadXRecord
    Dim N As Long
    N = 0
    ReDim IDX(N)
    ReDim DATA(N)
 
    ERR.Clear
    On Error Resume Next
    Set oDict = thisdrawing.Dictionaries.ITEM(DNAME)
    Set oXRec = oDict.ITEM(DTAG)
    ReDim IDX(0)
    IDX(0) = ID
    oXRec.GetXRecordData IDX, DATA
    DATA = DATA(ID)
   
    DWG_GET_XENTRY = ERR.Number = 0
End Function
Public Function DWG_GET_XENTRY_ALL(DNAME As String, DTAG As String, DATA, Optional N As Long) As Boolean
    DWG_GET_XENTRY_ALL = False

    Dim oDict As AcadDictionary
    Dim oXRec As AcadXRecord
   
    N = 0
    ReDim IDX(N)
    ReDim DATA(N)
 
    ERR.Clear
    On Error Resume Next
    Set oDict = thisdrawing.Dictionaries.ITEM(DNAME)
    If ERR.Number <> 0 Then
        Debug.Print ERR.DESCRIPTION
        Exit Function
    End If
    Set oXRec = oDict.ITEM(DTAG)
    If ERR.Number <> 0 Then
        Debug.Print ERR.DESCRIPTION
        Exit Function
    End If
    oXRec.GetXRecordData IDX, DATA
    If ERR.Number <> 0 Then
        Debug.Print ERR.DESCRIPTION
        Exit Function
    End If
    N = UBound(DATA)
    DWG_GET_XENTRY_ALL = ERR.Number = 0
End Function
Sub testxentry()
    DATA = "HALLO"
    Call DWG_SET_XENTRY("TEST", "WILLI", 0, DATA)
    DATA = ""
    Call DWG_GET_XENTRY("TEST", "WILLI", 0, DATA)
    Debug.Print DATA
   
    Debug.Print DWG_GET_XENTRY_ALL("TEST", "WALLY", DATA)
    ERR.Clear
    Debug.Print DWG_GET_XENTRY_ALL("TEST", "WILLI", DATA)
    Debug.Print N
End Sub
Function Select_entity_by_xdata(sset As AcadSelectionSet, appName As String) As AcadSelectionSet '(sset As AcadSelectionSet, blockName As String)
 
 
 
    Dim FilterType As Variant
    Dim FilterData As Variant
    Dim p1(0 To 2) As Double
    Dim p2(0 To 2) As Double
 
    Dim grpCode(0) As Integer
    Dim grpValue(0) As Variant
   
    grpCode(0) = 1001
    grpValue(0) = appName
   
    FilterData = grpValue
    FilterType = grpCode
       


   
    On Error Resume Next
    sset.Select acSelectionSetAll, , , FilterType, FilterData

 
   
End Function

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

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

ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 07. Nov. 2018 10:14    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 rexxitall,
wow, vielen Dank deine ausführliche Antwort, werden deinen Code mal testen.

Grundsätzlich sind mir XDATA bekannt, auch dass man sie an jedes AutoCAD Element anhängen kann.

Ich bräuchte sie nicht an die Polylinie angehängt, sondern an jedes einzelne Segment der Polylinie. Dazu finde ich aber weder im Forum noch mit Google etwas brauchbares.

lg, ritchie

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

ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 07. Nov. 2018 10: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

Was mir noch eingefallen ist:

Grundsätzlich würde es genügen, wenn mann die einzeln Segmente der Polylinie mit unterschiedlichen Linientypen versehen kann. Das würde im Prinzip reichen.

Lg, ritchie

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: 266
Registriert: 07.06.2013

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

erstellt am: 07. Nov. 2018 14:51    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 ritchie1 10 Unities + Antwort hilfreich

Hi kurze knappe Antwort Das geht nicht! Ein Segment einer Polylinie ist Bestandteil des "Entity" Datensatzes oder Datenstruktur. Diese nimmt die Strichelung auf und gilt für die gesamte Polylinie. Da hast du nur die Möglichkeit das aus einzelnen Linien zusammenzubosseln und ggf in eine Gruppe oder Block zu verfrachten. Gleiches gilt für die Segmentinfo. Die Xdatas und Dictionarys kleben auch am Entity. Das "krankeste" was mir einfiele um sowas an einer Polylinie zu erreichen wäre eine Strichelung über die gesamte Polylinienlänge zu erzeugen. Dann hat jede Polylinie ne eigene Liniendefinition. Aber das kann ich wirklich nur unter der Rubrik völlig schräg verkaufen. Das lassen wir besser. Ich würde mal überlegen ob dynamische Blöcke oder Constraints da nicht ne Alternative wären. Lieben Gruß

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

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

ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 07. Nov. 2018 16:00    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 rexxitall!
wieso meint dann cadffm in post nr. 3 dass es mit einer "heavy polyline" geht?

was ich geschafft habe wäre die dicke der polyline segmentweise anzupassen. aber das hilft mir nicht weiter...


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: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 07. Nov. 2018 16:11    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 ritchie1 10 Unities + Antwort hilfreich

Weil cadffm eventuell nicht bekannt ist ob dieses ihm Bekannte
in der vba Welt zugänglich ist. SORRY.
Im DXF/AutoLISP Objektmodell, wenn man es denn so nennen darf, hast du Zugriff.

Damit du es mal siehst: Markiere die PL und starte Befehl LISTE
Oder per Lisp in der Befehlszeile: (entget(car(nentsel)))
und klicke ein Segment der Polyline an.

Falls es mit VBA nicht erreichbar ist(wie es sich anhört) dann kann ich es (Lisp), du aber nicht (vba).

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: 266
Registriert: 07.06.2013

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

erstellt am: 07. Nov. 2018 17:08    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 ritchie1 10 Unities + Antwort hilfreich

Ja man kommt mit VBA nicht direkt an alles ran.
Aber man kann notfalls von VBA aus Lisp Routinen aufrufen (mit Parametern etc) Sowas binde ich auch gelegentlich (ungern) ein.

Oder wenn gar nichts mehr geht, sich eine .NET DLL schreiben, welche man von VBA aus ebenfalls aufrufen kann. Das geht wenn man einmal raus hat wie, mit VB.NET relativ bequem. Ist halt nur lästig, da man zum debuggen bei jeder neu erzeugten Version zum testen Autocad neu starten darf.

An die Strichstärken einer Heavy Polylinie kommt man aber, meine ich, ran. Glaub da habe ich irgendwo was rumfahren was die Linienstärke vereinheitlicht.

Nur das bringt unseren Freund ja alles nicht so wirklich weiter.

Was ne Idee vielleicht wäre, wäre so ne art LOGO Interpreter der in einem Block die Polylinienelemente dynamisch zur Laufzeit erzeugt.

Um da noch mehr Leben reinzuhauchen kann man da auch noch per Dictionary VBS oder Javascripte mit einbinden (Windows Scripting Host). Sowas habe ich mir für einen Brückenbau Generator gebaut. Hintergrund war der das ich wenn ein Fehler im Block Script auftritt, nicht das ganze VBA stoppt. Das funktioniert super, ist aber nicht mal eben geschrieben. Ist so ne Art Mini Revit um Solids dynamisch zu erzeugen. Gehen tut vieles. Nur ist der Aufwand oft halt auch nicht gerade gering. In sowas gehen Monate rein.

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

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

ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 07. Nov. 2018 17:50    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

vb.net wäre genauso ok (wenn es ginge).

aber ich hab mir das mal durchgelesen, geht meines erachtens mit vb.net auch nicht.

https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2018/ENU/OARX-ManagedRefGuide/files/OREFNET-Autodesk-AutoCAD-DatabaseServices-Polyline-html.html

@rexxitall
also zu kompliziert solls nicht werden :-)

@cadffm
hab deinen lisp befehl ausprobiert. egal welches segment ich wähle, die rückgabewerte sind bei mir immer gleich

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: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 07. Nov. 2018 18:10    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 ritchie1 10 Unities + Antwort hilfreich

Dann hast du nicht das von mir genannte Objekt(typ) angeklickt...

In der Rückgabe von (assoc 0 (entget(car(entsel)))) müßte stehen (0 . "POLYLINE")

Mit Befehl LISTE ->
Befehl: liste
1 gefunden

                  POLYLINIE


Und in der Eigenschaftenpalette "2D-Polylinie"

Ich vermute du klickst eine zuvor bereits erwähnte LWPOLYLINE an, welche nur ein Objekt darstellt,
lese noch mal meine Antwort oben dazu, auch wenn es nichts ändert für sich.

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: 266
Registriert: 07.06.2013

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

erstellt am: 07. Nov. 2018 18:23    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 ritchie1 10 Unities + Antwort hilfreich

Also an die Breiten kommt man z.b. so
Sub lwpoly(lw As AcadLWPolyline)
Call lw.SETWIDTH(0, 1, 2)'index,startbreite,endbreite
End Sub

Aber wie schon geschrieben ich würde einen CSV String per Dictionary anbringen und
da hat dann jedes Segment der Polyline eine entsprechende Zeile mit deinen Werten.
Das ist mit meinen geposteten Routinen ein besserer Einzeiler.

Gut bei Änderungen an der Polylinie musst du die CSV selbst mitpflegen.
Aber das erscheint mir als der Weg des geringsten Wiederstandes.

Und nein, nicht ein jeder muss Revit nachbauen *lacht*
Funzt aber  und macht das Entwerfen von Brücken deutlich angenehmer 
Und nein, Revit ist da nicht das Mittel der Wahl.
DAS haben wir schon durch 

Lieben Gruß

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< 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: 266
Registriert: 07.06.2013

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

erstellt am: 07. Nov. 2018 19: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 ritchie1 10 Unities + Antwort hilfreich

Noch ne Idee zu dem CSV und den Breiten.
Man kann die Segmentbreiten ja als dezimalzahlen angeben.
nun könnte man auf den Trichter kommen in den Breiten den
Index zu der CSV Zeile zu verschlüsseln.
Genug Nachkommastellen sind ja da ohne das man das optisch bemerken würde.
1.0001 Erste  Zeile der CSV
1.0002 Zweite Zeile der CSV
1.0003 Dritte Zeile der CSV

Lieben Gruß

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

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

ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 22. Nov. 2018 20:51    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 rexxitall!
Hallo cadffm!

Nach einer kleinen Schaffenspause hab ich meine Lösung. Also:

Die Zusatzinformationen für die einzelnen Segmente der Polyline werde ich mit XDATA an die Polylinie dranhängen. Ablauf:

- Segment in der Polylinie klicken
- mit den Methoden getClosestPointTo und getParamAtPoint (vb.net) das Segment ermitteln
- XDATA an Polylinie anhängen mit: SegmentNr / Kantentyp / etc.

Vielen Dank fürs Brainstorming!!
lg, ritchie

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: 266
Registriert: 07.06.2013

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

erstellt am: 23. Nov. 2018 13:09    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 ritchie1 10 Unities + Antwort hilfreich

Hi
Also die gesamte Info würde ich nicht mit XDATAS dran hängen. Die werden bei einem Audit nämlich gnadenlos, nach 40 Stellen oder so abgeschnitten.
Nimm für die eigentlichen Daten besser ein ACADDICTIONARY. Das kann man genauso an die Polylinien anhängen und das bleibt im Falle des Falles Intakt. Also in die XDATAS nur die Info rein: Hallo ich bin ne Speziallinie, ich habe ein Dictionary im Gepäck. das bekommt man locker in ein paar bytes rein. Das hat den Vorteil, das man diese Polylinien mit einem Selektionset Filter selektieren kann. Lieben Gruß
Thomas

Jaaa, ich habe auch schon mal sowas nur mit xdatas gemacht. Nach dem Audit die Zusatzinfo zu rekonstruieren war nicht gerade lustig.

------------------
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

ritchie1
Mitglied



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

Beiträge: 25
Registriert: 10.10.2017

AutoCAD 2008, AutoCAD 2011

erstellt am: 25. Nov. 2018 21:04    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

hi rexxitall,
guter tip, vielen dank!
werde ich so umsetzen!
lg ritchie

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