FastFiber

selecteren uit dxf file

Gestart door martin, wo 24 08 2016, 10:59:19

Vorige topic - Volgende topic

roy_043

Houd er rekening mee dat het block 'stamp' geen attributes heeft maar vaste teksten. De definitie van dit block is dus, afhankelijk van de schaal, in elke DXF verschillend. Dit is een probleem als je de DXFs in dezelfde tekening wilt inserten. In een dwg kan immers per block-naam maar één enkele block-definitie bestaan.

Voorbeeld:

Insert-volgorde:
0000001.dxf
0000002.dxf
Resultaat:
Beide inserts hebben nu de schaalaanduiding 1:35

Insert-volgorde:
0000002.dxf
0000001.dxf
Resultaat:
Beide inserts hebben nu de schaalaanduiding 1:45

Het valt op dat in de verschaalde DXF sprake is van 'dim overrides'. Door de 'override' tekst te vergelijken met de maat tussen de meetpunten van een maatlijn moet de schaalfactor ook te achterhalen zijn.

martin

Het plan is om de blocks "stamp" bij het inserten steeds te exploden, vervolgens de tekening te purgen, dan is het block weg, en dan met de routine het volgende dxf weer inserten, dan zal hij het block als nieuw inlezen en is de (nieuwe) schaal wel aanwezig.
Klinkt simpel, maar om dit hele spectacel in de code te zetten, weet ik niet op welke plaats en hoe.
De truc is om na het inserten de schaal te selecteren, hoe moet dat?
Hoe kan je bijvoorbeeld een window selecteren en dan vervolgens een tekst hierin selecteren met een bepaalde grootte ?
groet,Martin


gery

Citaat van: martin op vr 09 09 2016, 21:08:07Hoe kan je bijvoorbeeld een window selecteren en dan vervolgens een tekst hierin selecteren met een bepaalde grootte ?
Wat dacht je hiervan: http://www.cadsite.be/smf/index.php?topic=6487.msg33932#msg33932
AutoCAD 2020 - Windows 10

martin

ssget "_X" is toch de hele tekening? kan je dit ook met een window?

gery

AutoCAD 2020 - Windows 10

roy_043

#20
Het is, denk ik, logischer om de schaal vast te stellen voordat de insert wordt geëxplodeerd.
(defun SchaalUitStamp ( / scl)
  (if (tblobjname "block" "stamp")
    (vlax-for obj (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) "stamp")
      (if
        (and
          (= "AcDbText" (vla-get-objectname obj))
          (equal 2.4 (vla-get-height obj) 0.05)
          (wcmatch (vla-get-textstring obj) "~*[~0123456789]*")
        )
        (setq scl (atoi (vla-get-textstring obj)))
      )
    )
  )
  scl
)


Direct na het inserten van een DXF kun je deze code invoegen om te verschalen.
(if
  (and
    (setq scl (SchaalUitStamp))
    (/= 35 scl)
  )
  (command "_.scale" (entlast) "" (list x0 y0) (/ scl 35.0))
)


Voorwaarde is wel dat je na het exploderen het block "stamp" steeds purget.

EddyBeerke

Citaat van: roy_043 op za 10 09 2016, 14:42:38
Het is, denk ik, logischer om de schaal vast te stellen voordat de insert wordt geëxplodeerd.
(defun SchaalUitStamp ( / scl)
  (if (tblobjname "block" "stamp")
    (vlax-for obj (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) "stamp")
      (if
        (and
          (= "AcDbText" (vla-get-objectname obj))
          (equal 2.4 (vla-get-height obj) 0.05)
          (wcmatch (vla-get-textstring obj) "~*[~0123456789]*")
        )
        (setq scl (atoi (vla-get-textstring obj)))
      )
    )
  )
  scl
)

...

Hoe ga je om met deze text ->> 2.399999999999999:
AcDbText
10
-73.53833399999999
20
8.245836999999999
30
0.0
40
2.399999999999999
  1
35
  7
Stempel
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

roy_043

Citaat van: EddyBeerke op di 13 09 2016, 11:58:37
Hoe ga je om met deze text ->> 2.399999999999999:
Ik gebruik (equal) inclusief het optionele 'fuzz' argument:
Citaat van: http://docs.autodesk.com/ACD/2011/ENU/filesALR/WS1a9193826455f5ff1a32d8d10ebc6b7ccc-6a38.htm(equal expr1 expr2 [fuzz])

martin

Bedankt voor de tips, ik ga er binnenkort mee verder.

Eddy, waarom vraag je dat van 2.399999999999999 ?
Wat gaat er nu niet goed?
groetjes,Martin

EddyBeerke

Citaat van: roy_043 op di 13 09 2016, 12:38:08
Ik gebruik (equal) inclusief het optionele 'fuzz' argument:
Oke, weer wat geleerd.
Citaat van: martin op di 13 09 2016, 20:56:25
...
Eddy, waarom vraag je dat van 2.399999999999999 ?
Wat gaat er nu niet goed?
Wat gaat er nu wel mis?  :mrgreen:

Wilde weten hoe Roy dat oploste, en nu weet ik dat.
Kan ook nog veel leren!  :pintje:
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/