FastFiber

LISP coördineert niet goed (opgelost)

Gestart door zone2000, do 12 06 2008, 14:58:09

Vorige topic - Volgende topic

zone2000

Hallo,

Dit is een LISP die een een getal in twee cirkels met een solid hatch zet. Het probleem is nu dat AutoCAD ongeveer 3 op de 10x het getal verkeerd plaatst. Naar mijn weten gebeurt dit willekeurig, het maakt niet uit in welk kwadrant je de cirkel plaatst. Ik kwam er wel achter dat het sneller fout gaat na scrollen (zoomen), en dat het zodra het fout gaat ook weer met scrollen te verhelpen is.

De fout bij mij is dat AutoCAD het getal soms te ver naar links en te ver naar beneden plaatst, dus dwars door de cirkel heen.
Doe ik iets fout of heeft dit met een vage bug te maken?

Alvast bedankt,
Groeten Lars

(defun c:knr (/ a b c s1 s2 s3 s4)
  (setq a (getpoint))
  (setq b (list (- (car a) 450) (+ (car (cdr a)) 580) 0.0))
  (setq c (list (+ (car a) 450) (- (car (cdr a)) 580) 0.0))
  (command "circle" a "1000")
  (setq s1 (entlast))
  (command "circle" a "800")
  (setq s2 (entlast))
  (command "-hatch" "p" "s" "s" s1 s2 "" "")
  (setq s3 (entlast))
  (command "-mtext" b "h" "1200" c "3" "")
  (setq s4 (entlast))
  (princ)
  (command "scale" s1 s2 s3 s4 "" a pause)
  (princ)
  (princ)
)

DIJKHUIS

Hallo zone2000,

Ik heb het iets aangepast:
(defun c:knr (/ a s1 s2 s3 s4)
  (setq a (getpoint "\nGeef insertie punt: "))
  (command "circle" a "1000")
  (setq s1 (entlast))
  (command "circle" a "800")
  (setq s2 (entlast))
  (command "-hatch" "p" "s" "s" s1 s2 "" "")
  (setq s3 (entlast))
  (command "text" "j" "mc" a "1200" "0" "3" "")
  (setq s4 (entlast))
  (command "scale" s1 s2 s3 s4 "" a pause)
  (princ)
)

Ik heb het zo aangepast dat de tekst altijd in het centrum van de cirkel staat.

Allen snap ik niet waarom je het eerst gaat in voegen en vervolgens verschalen. Waarom niet in 1 keer goed?


Michel

zone2000

Hallo Dijkhuis,

De LISP doet het vandaag ineens wel goed, maar jouw stukje voor het plaatsen van tekst is een stuk slimmer :D.
Ik verschaal alles aan het einde omdat ik deze cirkels met tekst plaats in kastjes. Ik geef elke kast een uniek nummer.
Maar omdat de kasten heel erg van formaat kunnen verschillen klik ik met deze LISP ongeveer in het midden van een kast en dan bepaal ik de grootte van de cirkel op het oog.
Ik heb een iets ander stukje code voor het verschalen gemaakt zodat de cirkel vergroot en verkleint bij het bewegen van de muis.
De code voor het verschalen die ik hier gegeven heb wacht echt op een getypte schaal en laat dat dus niet meteen visueel in het AutoCAD scherm zien.

Ik gebruik zelf altijd Mtext omdat ik het aanpassen ervan gemakkelijker vind gaan. In een Mtext kan je door middel van een 'enter' meerdere regels onder elkaar krijgen.
Bij 'text' kan dit alleen als je het voor de eerste keer aanmaakt, maar bij het veranderen ervan kun je geen regels onder elkaar typen voor zover ik weet.
Klopt dit? En zitten er nog meer grote verschillen tussen text en mtext?

Bedankt voor je hulp.

Groeten,
Lars

Reimer

Volgens mij gaat jouw eigen lisp met de MTEXT fout doordat objectsnap aan staat. Wanneer de mtext wordt geplaatst op de punten b en c, dan wordt het dichtstbijzijnde OSNAP punt gepakt. Probeer je lisp nog eens een paar keer met en zonder de OSNAP aan.
In het begin van de lisp kun je je OSNAP gegevens opslaan: (setq oldsnap (getvar "osmode"))
Vervolgens zet je de OSNAP uit: (setvar "osmode" 0)
Aan het einde zet je je oude OSNAP terug. (setvar "osmode" oldsnap)

Zelf werk ik liever met TEXT dan met MTEXT. Dit omdat een text sneller te bewerken is. Ook is een text minder "zwaar"  dan een mtext. Alleen wanneer ik meerdere regels wil of bijvoorbeeld opsommingen, dan gebruik ik mtext.

Reimer.

zone2000

Bedankt Reimer en Dijkhuis,

Door de snap instellingen op te slaan en dan snap uit te zetten werkt de LISP wel goed.
Aan het einde zet de LISP de snap instellingen weer terug.

Bedankt voor de reacties.

Groeten, Lars.

FastFiber