FastFiber

welk commando voor insert block (opgelost)

Gestart door marcelmaas, do 07 05 2009, 20:27:36

Vorige topic - Volgende topic

HofCAD

#30
Beste Marcel,

Misschien heb je iets aan de bijlage.
In HofCAD03.dvb worden nl de blocks en de lagen aangemaakt.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

marcelmaas

Hi Hofcad,

WAUW.....!!!!!

Mooi gedaan zeg, dit was mij voorlopig zelf nog niet gelukt.
Ik hoop over enkele weken als ik de 4 daagse vba training heb gehad van ir. R. Boeklagen, dat mij dit soort dingen ook lukt.

In ieder geval weer heel erg bedankt voor de goeie hulp.

Groeten Marcel..

marcelmaas

Hi Hofcad,

Nu ik aan het testen ben, kom ik er achter dat er iets nog niet helemaal goed gaat.

Het is namelijk zo dat als ik mijn tekening een beetje verdraai met USC Object (wat ik veel gebruik), dat dan het block wat ik invoeg niet geplaatst wordt zoals op de preview van het formulier, maar wel ten opzichte van USC World goed geplaatst word.

Dus als ik nieuwe tekening open dan gaat het goed, maar verdraai ik de tekening wat met de klok mee of tegen de klok in, dan staat het block er niet recht in.

Groeten Marcel..

HofCAD

#33
Beste Marcel,

In de AutoCAD Help kun je dit vinden:
Sub Ch8_TranslateCoordinates()
    ' Create a polyline in model space.
    Dim plineObj As AcadPolyline
    Dim points(0 To 14) As Double

    ' Define the 2D polyline points
    points(0) = 1: points(1) = 1: points(2) = 0
    points(3) = 1: points(4) = 2: points(5) = 0
    points(6) = 2: points(7) = 2: points(8) = 0
    points(9) = 3: points(10) = 2: points(11) = 0
    points(12) = 4: points(13) = 4: points(14) = 0

    ' Create a light weight Polyline object in model space
    Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)

    ' Find the X and Y coordinates of the
    ' first vertex of the polyline
    Dim firstVertex As Variant
    firstVertex = plineObj.Coordinate(0)

    ' Find the Z coordinate for the polyline
    ' using the elevation property
    firstVertex(2) = plineObj.Elevation

    ' Change the normal for the pline so that the
    ' difference between the coordinate systems
    ' is obvious.
    Dim plineNormal(0 To 2) As Double
    plineNormal(0) = 0#
    plineNormal(1) = 1#
    plineNormal(2) = 2#
    plineObj.Normal = plineNormal

    ' Translate the OCS coordinate into WCS
    Dim coordinateWCS As Variant
    coordinateWCS = ThisDrawing.Utility.TranslateCoordinates _
          (firstVertex, acOCS, acWorld, False, plineNormal)

    ' Display the coordinates of the point
    MsgBox "The first vertex has the following coordinates:" _
           & vbCrLf & "OCS: " & firstVertex(0) & ", " & _
           firstVertex(1) & ", " & firstVertex(2) & vbCrLf & _
           "WCS: " & coordinateWCS(0) & ", " & _
           coordinateWCS(1) & ", " & coordinateWCS(2)
End Sub

Verder moet je ook nog je teksten in de juiste tekststijl plaatsen:
Function newStyle(StyleName)
Dim StyleObj As AcadTextStyle
Dim currStyle As AcadTextStyle
Set styleColl = ThisDrawing.TextStyles
Set currStyle = ThisDrawing.ActiveTextStyle
On Error Resume Next
Set StyleObj = ThisDrawing.TextStyles.Item(StyleName)
If Err Then
Set StyleObj = styleColl.Add(StyleName)
Err.Clear
End If
StyleObj.SetFont "Arial", False, False, 0, 34
ThisDrawing.ActiveTextStyle = StyleObj
End Function

Met vriendelijke groet, HofCAD CSI.

PS In de bijlage boven is HofCAD03.dvb aangepast met newStyle en
textObj.StyleName = "Standard"
ACADcadabra

marcelmaas

Hi Hofcad,

Ik heb de bovenste code in de cmdOK_click gezet en uitgeprobeerd, maar waarschijnlijk denk ik weer te makkelijk.
Het werkt zo namelijk nog niet.
Moet er nog iets gewijzigd worden aan de code, of doe ik iets fout?

groeten Marcel..

HofCAD

#35
Beste Marcel,

Je bedoelt waarschijnlijk TranslateCoordinates, kijk daarvoor naar bijv.:
http://discussion.autodesk.com/forums/message.jspa?messageID=5314936
http://www.cadforums.net/ftopic6881.html
en http://www.cadtutor.net/forum/showthread.php?t=23468 met Sub InsertWithReference
Sub InsertWithUcs()
Dim varInsertPt As Variant
Dim varInsertPtTran As Variant
Dim entInsert As AcadBlockReference
Dim dblOr(2) As Double
Dim dblX(2) As Double
Dim dblZ(2) As Double
Dim varZ As Variant
Dim varX As Variant
Dim dblAngle As Double
dblX(0) = 1#: dblZ(2) = 1#
With ThisDrawing
varZ = .Utility.TranslateCoordinates(dblZ, acUCS, acWorld, 1)
varInsertPt = .Utility.GetPoint(, Chr(10) & "Voer het Invoegpunt in:")
varX = .Utility.TranslateCoordinates(dblX, acOCS, acUCS, 1, varZ)
dblAngle = .Utility.AngleFromXAxis(dblOr, varX)
Set entInsert = .ModelSpace.InsertBlock(varInsertPt, "AanvoerO", 1#, 1#, 1#, -dblAngle) 'adjust block name as needed
End With
End Sub

want in de bijlage boven is HofCAD03.dvb aangepast met newStyle en
textObj.StyleName = "Standard".

Met vriendelijke groet, HofCAD CSI.

PS Probeer de Sub InsertWithUcs eens uit in een tekening waarin
het block AanvoerO aanwezig is en het coordinatenstelsel bijv. 30 graden
gedraaid is.
Laat me het AUB weten of dit het is, want dan verander ik HofCAD03.dvb
ACADcadabra

marcelmaas

#36
Hi Hofcad,

Ik kan je bestand niet openen, het is niet de goede extensie ofzo.
Ik heb al geprobeerd het .bas bestand op te slaan als .dvb bestand maar dat werkte niet.
Zou je het opnieuw er op willen zetten.?

groeten Marcel..

HofCAD

#37
Beste Marcel,

Een *.bas bestand kan je in de Visual Basic editor importeren(VBAIDE->File->'Import File...').
Het bas bestand is eigenlijk een tekstbestand wat met Notepad is aangemaakt, en gebruikt
werd bij de voorganger van Visual Basic.
In het bestand staan twee sub's die je kan gebruiken als in de tekening het block AanvoerO zit.
Bij de sub InsertWithReference (http://www.cadtutor.net/forum/showthread.php?t=23468)
kan je het block bij het invoegen verdraaien.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

marcelmaas

Hi Hofcad,

Ik heb: 'Sub InsertWithReference()' geprobeerd en die werkt wel, alleen moet ik daar een keer klikken om het block neer te zetten, en dan nog een keer voor een angle aan te geven waarin het block geplaats moet worden.

Ook heb ik:  'Sub InsertWithUcs()' geprobeerd, en die werkt zonder problemen, dus als we die kunnen gebruiken zou dat helemaal top zijn.!!

Groeten Marcel..

HofCAD

#39
Beste Marcel,

Probeer eens.
Vraag 1: Hebben de tekeningen altijd dezelfde schaal, want anders zou je
bijv. de invoegschaal afhankelijk van de AutoCAD variabele Dimscale.
Vraag 2: Vind je het niet gevaarlijk de tekststijl Standard te gebruiken met
het font Arial, daar de naam Standard niet opvalt als een eigen stijl.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

marcelmaas

#40
Hi Hofcad,

Nu komt het block er in zoals het zou moeten, perfect!!

Inderdaad werkt het nu wel bij een tekening waar deze blocken al in staan, maar gaat het niet goed als ik een nieuwe tekening open.
Dan komt het block er veel te groot in.!!

1. Wij tekenen altijd 1:1 en meestal drukken we af op schaal 1:50

2. De tekststyle mag standard zijn, met het font romans.shx

HofCAD

#41
Beste Marcel,

Met alle medewerkers van de tekenkamer is daarover normaal gesproken een afspraak.
Bijv. dat je alle symbolen met de Dimscale verschaalt en dat bijv. de tekststijl naar
de firmanaam is genoemd.
De naam Standard voor tekststijl of voor bijv. een dimstijl vind ik gevaarlijk,
omdat anderen deze stijlnaam ook kunnen toepassen in een programma of in
een block met een andere definitie.
Als je de symbolen altijd met de Dimscale verschaalt, dan zal de definitie
in het programma waarschijnlijk 50 keer zo klein moeten zijn.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

marcelmaas

Hi Hofcad,

Ik had het hier nog eens nagevragen en wij kwamen hier tot de conclusie dat we nog niet echt een bedrijfs dimstyle hebben, maar dat het inderdaad wel beter is als we die wel gaan toepassen.

De dimstyle gaan we dan HCKP noemen en de font romans.


Groeten Marcel..


marcelmaas

Hi Hofcad,

Jij zegt:

Als je de symbolen altijd met de Dimscale verschaalt, dan zal de definitie
in het programma waarschijnlijk 50 keer zo klein moeten zijn.

Wat bedoel je daar precies mee..??

De blocken die ik met dit programma wil invoegen zouden toch gewoon 1:1 getekend kunnen worden.?

groeten Marcel..

HofCAD

#44
Beste Marcel,

In het programma heeft de tekst een teksthoogte van resp. 100 en 90 en dat wordt
bij 50x verkleinen 2 en 1.8.
Als ik een tekst  van 2 in een block bij het invoegen 50x zo groot invoeg, zal de
tekst dus weer 100 zijn.
Bij het plotten met een plotschaal 1:50 zal de tekst op papier 2 hoog zijn.

Als je de tekening bij het plotten 50x verkleint, houdt dat in dat de bemating 50x zo groot getekend
moet als bij het 1:1 plotten.
Inplaats van alle dimstyle instellingen die iets met grootte (Bijv. DIMASZ, DIMEXE, DIMEXO en DIMTXT)
te maken te wijzigen, kun je ook in de dialoogbox bij het tabblad Fit bij 'Scale for dimension features'
de scale veranderen.
In feite verander je dan de Dimscale in je DimStyle.

Ik maak een verschil tussen blocken van symbolen en blocken van objecten.
Een block van een bed met ware afmetingen zie ik als een block van een object
en deze plaats altijd 1:1, omdat ik de kamer ook 1:1 teken.
Een block van een windroos zie ik als een block van een symbool en deze plaats
ik in afhankelijkheid van de plotschaal.

Als iedereen op de tekenkamer de discipline heeft om bij aanvang van een tekening
de Dimscale op de omgekeerde plotschaal te zetten (1:50 geeft 50), dan kan je
in je programma zetten:
Schaal = ThisDrawing.GetVariable("DIMSCALE") :    Rotation = 0
Een andere oplossing is dat je in de dialoogbox een instelmogelijkheid geeft voor
de schaal.



Met vriendelijke groet, HofCAD CSI.
ACADcadabra

FastFiber