Hallo,
ik ben uit nieuwsgierigheid begonnen met macro's te schrijven voor Autocad 2016. Ik kan heel veel info vinden op internet maar loop tegen het volgende probleem aan en ben eigenlijk op zoek naar een voorzetje.
Ik wil graag een macro met de volgende commandos:
move from basepoint met een offset. Als ik deze macro opneem met de action-recorder staan er al coördinaten in de macro en ik wil de macro dus zo maken dat ik het basepoint en de offset nog kan bepalen. Wie geeft mij de voorzet?
Alvast bedankt
Een LISP-routine lijkt me de beste oplossing te zijn. Tenminste zo zou ik het oplossen.
dus is het niet mogelijk met een simpele macro?
Citaat van: matizje op di 20 12 2022, 10:22:36
dus is het niet mogelijk met een simpele macro?
Volgens mij niet, maar ik gebruik zelden tot nooit macro's dus ik ben geen referentie op dat gebied, ik werk liever met LISP, dat is veel krachtiger.
Kan dit misschien een oplossing zijn?
https://knowledge.autodesk.com/support/autocad-lt/learn-explore/caas/CloudHelp/cloudhelp/2019/ENU/AutoCAD-LT/files/GUID-9D921CDD-89A3-44AB-865A-00F8986611F2-htm.html
dit helpt zeker maar weet alleen niet hoe ik dit nu moet toepassen in de macro.
Ik heb nu de volgende macro-regel
^C^C_.move \ _.from \\
Alleen het _from commando wordt niet geactiveerd bij de vraag : "specify second point: vh MOVE commando
Moet die "from" daar wel staan?
volgens mij wel, ik wil nl vanaf het 2e specify point een offset geven voor het MOVE commande.
Normaal klik ik dan tijdens get MOVE commando op de SHIFT+rechtermuis-knop om FROM te selecteren, zie bijlage
Is "from" wel een geldig commando?
commando staat in het : "object snap cursor menu" , zie bijlage
of moet ik dit shortcut menu verwerken in de macro???
Maar kan je die zomaar gebruiken in het move commando in een macro?
dat is dus eigenlijk de grote vraag voor een beginnend macro schrijver......
als ik het menu kan aanroepen dmv een macro zou ook de oplossing kunnen zijn
Sorry, daarmee kan ik niet helpen, zoals gezegd, ik ben een LISP man.
thx anyway
you're welcome
hoe zou zoiets eruit komen te zien in LIsp dan, ga ik me daarin verdiepen
de manier zoals ik het nu doe met SHIFT+rechter muis geeft dit weer in het commandoscherm:
MOVE
Select objects: 1 found
Select objects:
Specify base point or [Displacement] <Displacement>:
Specify second point or <use first point as displacement>:
>>Enter new value for ORTHOMODE <1>:
Resuming MOVE command.
Specify second point or <use first point as displacement>: _from Base point: <Offset>: 50
Als je bij "specify second point or <use first point as displacement>:" @50,0 invult, dan krijg je een verschuiving van 50 eenheden in positieve richting op de X-as. Vul je @0,-50 in, dan krijg je een verschuiving van 50 eenheden in negatieve richting op de Y-as. Vul je @50,50 in dan krijg je een verschuiving van +50 eenheden op de X-as en +50 eenheden op de Y-as. Het is hierbij niet van belang wat je als base point kiest.
Is dat misschien wat je in gedachten had?
ik wil het aantal eenheden pas invoeren bij het uitvoeren van de macro. Dus ik selecteer een lijn, geef het basepoint van deze lijn aan. Vervolgens wil ik een punt op een andere lijn aangeven wat als basis dient voor de verplaatsing en dan pas het aantal eenheden van de verplaatsing.
Ik vrees dat ik je niet helemaal begrijp.
Citaat van: matizje op di 20 12 2022, 12:03:21
...
^C^C_.move \ _.from \\
...
Volgens mij kan dit wel maar moet je een paar dingen wijzigen.
Geen punt bij _from
Na Move wil je een object selecteren en volgens mij ook eerst een startpunt kiezen (als ik je uitleg goed heb begrepen)
^C^C_.move \\\_from \\
Zelf ben ik fan van Lisp en denk ik dat je daar meer plezier van kunt hebben wanneer je meer van dit soort dingen wilt gaan automatiseren.
Groeten,
Reimer.
Reimer,
dat is 'm, het werkt. BEDANKT!!!!!!!!!!!!!!!
Reimer,
ik heb iets te vroeg gejuicht. Ik kan met deze macro maar 1 object selecteren en geen meerdere. Als ik meerdere objecten achter elkaar selecteer kopieert ACAD deze object niet vanaf het 2 basepoint maar van de orginele positie. Hoe kan ik dit aanpassen?
Als je een macro maakt probeer dan eerste of je de actie op je scherm voor elkaar krijg.
En macro is vooral een aantal opeenvolgende commando's
via diesel kan er wat intelligentie in maar dat is beperkt.
move is een verplaatsing over een vector.
alle objecten ondergaan de zelfde verplaatsing.
als je meerdere objecten wilt verplaatsen met een andere vector moet je meerder keren move gebruiken dan kan het niet in 1 keer
het gaat om objecten(2 lijnen) die tegelijk verplaatst moeten worden op de zelfde vector
De backslash staat voor één gebruikersinvoer. (hier: selecteer een object, beëindig de selectie, kies punt 1).
Als je meer objecten wilt selecteren dan moet je extra backslashes toevoegen. Hoe het gaat met bijvoorbeeld een crossing selection weet ik zo even niet.
Dit is meteen de beperking van een macro/script. Met lisp kun je dit beter programmeren.
Reimer.
thx, het werkt nu naar behoren
je kan je macro ook beginnen met select en can bijvoorbeeld een crossing dan is het aantal elementen flexibel
Citaat van: matizje op di 20 12 2022, 15:03:00
hoe zou zoiets eruit komen te zien in LIsp dan, ga ik me daarin verdiepen
de manier zoals ik het nu doe met SHIFT+rechter muis geeft dit weer in het commandoscherm:
MOVE
Select objects: 1 found
Select objects:
Specify base point or [Displacement] <Displacement>:
Specify second point or <use first point as displacement>:
>>Enter new value for ORTHOMODE <1>:
Resuming MOVE command.
Specify second point or <use first point as displacement>: _from Base point: <Offset>: 50
Is dit misschien wat je wil?
Maak een lsp-file van onderstaand, laad het in Autocad en start het commando "mm"
;;;Move Multiple
(defun c:mm (/ ss1 L1 L2)
(setq ss1 (ssget))
(while (setq L1 (getpoint "\nWijs Basis point (1) aan: "))
(setq L2 (getpoint L1 "\nWijs Referentie punt (2) aan: "))
(command "MOVE" ss1 "" L1 L2)
) ;_ end of while
(princ)
) ;_ end of defun