FastFiber

Coördinaten plaatsen bij cirkel.

Gestart door Bossie, wo 19 04 2006, 12:19:41

Vorige topic - Volgende topic

Bossie

Hallo,

ik ben onlangs begonnen met het studeren van Autolisp. Gewoon om commandos te vereenvoudigen.
Nu voor mijn werk (ben landmeter) moet ik piperacks opmeten. Dit gebeurt door van elke buis 3 punten op te meten (in X,Y,Z-coördinaat). Vervolgens wordt deze DXF uitgelezen in Acad en wordt met behulp van UCS een cirkel door deze 3 punten getekend. Zo wordt dit vr elke buis gedaan. Nu wanneer dit voltooid is, wordt dit geplot, en schrijven we de X,Y,Z-coördinaat bij elke cirkel erbij. Dit is natuurlijk een hels karwei.

Nu is het mogelijk om een routine te schrijven die direct de X,Y, Z-coördinaat bij de cirkel plaats wanneer je hem selecteert, zonder dat je alles achteraf moet neerpennen?
Alvast bedankt!

HofCAD

#1
Citaat van: Bossie op wo 19 04 2006, 12:19:41
Hallo,

ik ben onlangs begonnen met het studeren van Autolisp. Gewoon om commandos te vereenvoudigen.
Nu voor mijn werk (ben landmeter) moet ik piperacks opmeten. Dit gebeurt door van elke buis 3 punten op te meten (in X,Y,Z-coördinaat). Vervolgens wordt deze DXF uitgelezen in Acad en wordt met behulp van UCS een cirkel door deze 3 punten getekend. Zo wordt dit vr elke buis gedaan. Nu wanneer dit voltooid is, wordt dit geplot, en schrijven we de X,Y,Z-coördinaat bij elke cirkel erbij. Dit is natuurlijk een hels karwei.

Nu is het mogelijk om een routine te schrijven die direct de X,Y, Z-coördinaat bij de cirkel plaats wanneer je hem selecteert, zonder dat je alles achteraf moet neerpennen?
Alvast bedankt!
Beste Bossie,

Ik snap met m'n blond koppie niets van landmeten, maar als de cirkels op de bepaalde X, Y en Z waarden staan,
dan heb je misschien iets aan het onderstaande programma.
Maar je zal er nog flink aan moeten sleutelen.

Met vriendelijke groet, HofCAD CSI



(defun c:CXYZ (/ ~CMD ~OS ss n e ed r pm)
  (setq  ~CMD (getvar "CMDECHO")
~OS  (getvar "OSMODE")
  )
  (mapcar 'setvar '("CMDECHO" "OSMODE") '(0 0))
  (if (setq ss
     (ssget "X"
    '((0 . "CIRCLE"))
     )
      )
    (progn
      (setq  n  0
      )
      (repeat (sslength ss)
(progn
  (setq e  (ssname ss n)
ed (entget e)
pm (trans (cdr (assoc 10 ed)) e 0)
r  (cdr (assoc 40 ed))
  )
  (command "_TEXT"
   "J"
   "TC"
   (polar pm (* 1.5 pi) (+ r 7))
   "5"
   "0"
   (strcat (rtos (car pm) 2 2)
   ","
   (rtos (cadr pm) 2 2)
   ","
   (rtos (caddr pm) 2 2)
   )
  )
)
(setq n (1+ n))
      )
    )

  )
  (mapcar 'setvar '("OSMODE" "CMDECHO") (list ~OS ~CMD))
  (princ)
)
ACADcadabra

bart

wil je de waarde's van de gemeten  punten bij de circels hebben ?
(dus 3 coordinaten met (x,y,z).

Zo ja dan gaat dit alleen lukken met de waarde's uit de database

van circels weet autocad namelijk allleen het middenpunt, de diameter en de richting van het vlak waarin hij is getekend.
de oorspongkelijk 3 punten worden niet in de gegevens van de circel bewaard.
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Bossie

Citaat van: bart op wo 19 04 2006, 16:10:35
wil je de waarde's van de gemeten  punten bij de circels hebben ?
(dus 3 coordinaten met (x,y,z).

Zo ja dan gaat dit alleen lukken met de waarde's uit de database

van circels weet autocad namelijk allleen het middenpunt, de diameter en de richting van het vlak waarin hij is getekend.
de oorspongkelijk 3 punten worden niet in de gegevens van de circel bewaard.

We meten enkel 3 punten, om zo een cirkel te kunnen creëren door deze punten. De bedoeling is dus om de X,Y,Z-coördinaat van het middelpunt van de cirkel te kennen. Dit is nodig omdat we de theoretische coördinaat van het middelpunt reeds kennen, en dus kunnen zeggen hoeveel de buis moet verschoven of afgesneden dient te worden.  We vertrekken namelijk steeds van een vast assenstelsel rond een module (piperack), en vandaaruit meten we de uiteinden aan weerzijden van zo'n module. 
Greetz Bossie

HofCAD

#4
Beste Bossie,

Ik heb het bovenstaande programma iets veranderd, geeft het al reeds de waarden
die je verwacht.
Let op het verschil met:
http://www.cadsite.be/smf/index.php/topic,1088.0.html

Groetjes HofCAD CSI

PS Of kun je eenvoudige voorbeeld tekening op de site zetten, met de cirkels en de waarden.
ACADcadabra

Bossie

#5
Citaat van: HofCAD op wo 19 04 2006, 19:48:41
Beste Bossie,

Ik heb het bovenstaande programma iets veranderd, geeft het al reeds de waarden
die je verwacht.
Let op het verschil met:
http://www.cadsite.be/smf/index.php/topic,1088.0.html

Groetjes HofCAD CSI

PS Of kun je eenvoudige voorbeeld tekening op de site zetten, met de cirkels en de waarden.

Dit is het helemaal ! Ontzettend bedankt. Ik kan zo geen voorbeeld direct doorsturen, omdat ik hier thuis zo geen bestand heb momenteel.
Zo ziet het er nu dus uit :

(defun c:CXYZ (/ ~CMD ~OS ss n e ed r pm)
  (setq  ~CMD (getvar "CMDECHO")
~OS  (getvar "OSMODE")
  )
  (mapcar 'setvar '("CMDECHO" "OSMODE") '(0 0))
  (if (setq ss
     (ssget "X"
    '((0 . "CIRCLE"))
     )
      )
    (progn
      (setq  n  0
      )
      (repeat (sslength ss)
(progn
  (setq e  (ssname ss n)
ed (entget e)
pm (trans (cdr (assoc 10 ed)) e 0)
r  (cdr (assoc 40 ed))
  )
  (command "_TEXT"
   "J"
   "TC"
   (polar pm (* 1.5 pi) (+ r 7))
   "6"
   "0"
   (strcat
   "X= "
   (rtos (car pm) 2 4)
   ", Y= "
   (rtos (cadr pm) 2 4)
   ", Z= "
   (rtos (caddr pm) 2 4)
   )
  )
)
(setq n (1+ n))
      )
    )

  )
  (mapcar 'setvar '("OSMODE" "CMDECHO") (list ~OS ~CMD))
  (princ)
)


Nu heb je dus de X, Y en Z-waarde naast elkaar staan. Zou het mogelijk zijn om de X, Y en Z-waarde onder elkaar te plaatsen, indien dit niet teveel werk in beslag neemt? Of kan je me zeggen met welk commando dit gebeurt? Of moet je telkens opnieuw met het text-commando beginnen voor zowel de Y en Z-waarde.
Mss domme vragen hoor, mrja ik ben nog mr 2 dagen met AutoLisp bezig en heb voordien enkel wat geklungeld in VBA :)

Nogmaals bedankt
Groetjes Bossie

HofCAD

#6
Citaat van: Bossie op do 20 04 2006, 20:54:13
Nu heb je dus de X, Y en Z-waarde naast elkaar staan. Zou het mogelijk zijn om de X, Y en Z-waarde onder elkaar te plaatsen, indien dit niet teveel werk in beslag neemt? Of kan je me zeggen met welk commando dit gebeurt? Of moet je telkens opnieuw met het text-commando beginnen voor zowel de Y en Z-waarde.
Mss domme vragen hoor, mrja ik ben nog mr 2 dagen met AutoLisp bezig en heb voordien enkel wat geklungeld in VBA :)

Nogmaals bedankt
Groetjes Bossie

Beste Bossie,

Onderstaand programma plaatst de X-, Y- en Z-waarden onder elkaar.
Indien je voor de start van het programma altijd de dimscale op de juiste
waarde instelt, kan je de teksthoogte txtH van de dimscale laten afhangen.
Inplaats van txtH 5, zou je dan bijv. (* 5 (getvar "DIMSCALE")) kunnen
schrijven.
De plaats van de text met (polar pm (* 1.5 pi) (+ r (* 1.5 txth)))
moet dan ook veranderd worden naar  (polar pm (* 1.5 pi) (+ r (* 1.5 txth (getvar "DIMSCALE))))

Met vriendelijke groet, HofCAD CSI


(defun c:CXYZ (/ ~CMD ~OS txtH ss n e ed r pm)
  (setq ~CMD (getvar "CMDECHO")
~OS  (getvar "OSMODE")
txtH 5
  )
(command "_UNDO" "BEGIN")
  (mapcar 'setvar '("CMDECHO" "OSMODE") '(0 0))
  (if (setq ss
     (ssget "X"
    '((0 . "CIRCLE"))
     )
      )
    (progn
      (setq n 0
      )
      (repeat (sslength ss)
(progn
  (setq e  (ssname ss n)
ed (entget e)
pm (trans (cdr (assoc 10 ed)) e 0)
r  (cdr (assoc 40 ed))
  )
  (command "_TEXT"
   "J"
   "TC"
   (polar pm (* 1.5 pi) (+ r (* 1.5 txth)))
   txtH
   "0"
   (strcat
     "X= "
     (rtos (car pm) 2 4)
   )
  )
  (command "_TEXT"
   ""
   (strcat
     "Y= "
     (rtos (cadr pm) 2 4)
   )
  )
  (command "_TEXT"
   ""
   (strcat
     "Z= "
     (rtos (caddr pm) 2 4)
   )
  )
)
(setq n (1+ n))
      )
    )
  )
(command "_UNDO" "END")
  (mapcar 'setvar '("OSMODE" "CMDECHO") (list ~OS ~CMD))
  (princ)
)


PS De komende twee weken, ben ik niet bereikbaar
ACADcadabra

Bossie


FastFiber