FastFiber

Afmetingen in rechthoek

Gestart door Cad_user86, wo 19 10 2016, 09:41:03

Vorige topic - Volgende topic

Cad_user86

Hallo,

Voor mijn zaagplannen had ik graag in mijn rechthoeken automatisch de afmetingen gekregen (lengtexbreedte) in het midden van de rechthoek als ik deze teken.

Bestaat hier een command of lisp routine voor?

Ik heb internet even gezocht maar vrees dat ik niet de juiste benamingen gebruik in de zoekfuncties.

Ik kwam volgende tegen maar dit werkt niet bij me:

(defun c:LabelRec (/ ActDoc CurSpace Ht ss cnt Ent EntData VerPoints tmpEnt Wid Len Pt Str tmpText tmpDist1 tmpDist2)
; Label rectangles with length and width in middle of them.
(vl-load-com)
(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(if (= (getvar "cvport") 1)
(setq CurSpace (vla-get-PaperSpace ActDoc))
(setq CurSpace (vla-get-ModelSpace ActDoc))
)
(if (and (setq Ht (getreal "\n Enter height of text: ")) (setq ss (ssget '((0 . "*POLYLINE")))))
(progn
(setq cnt 0)
(while (setq Ent (ssname ss cnt))
(setq EntData (entget Ent))
(if (= (cdr (assoc 0 EntData)) "LWPOLYLINE")
(setq VerPoints (vlax-get (vlax-ename->vla-object Ent) 'Coordinates))
(progn
(setq VerPoints nil)
(setq tmpEnt (entnext Ent))
(while (not (equal (cdr (assoc 0 (entget tmpEnt))) "SEQEND"))
(setq tmpPt (cdr (assoc 10 (entget tmpEnt))))
(setq VerPoints (append VerPoints (list (car tmpPt))))
(setq VerPoints (append VerPoints (list (cadr tmpPt))))
(setq tmpEnt (entnext tmpEnt))
)
)
)
(if (= (length VerPoints) 8)
(progn
(setq tmpDist1 (distance (list (nth 0 VerPOints) (nth 1 VerPoints)) (list (nth 2 VerPoints) (nth 3 VerPoints))))
(setq tmpDist2 (distance (list (nth 2 VerPOints) (nth 3 VerPoints)) (list (nth 4 VerPoints) (nth 5 VerPoints))))
(if (< tmpDist1 tmpDist2)
(setq Len tmpDist2 Wid tmpDist1)
(setq Len tmpDist1 Wid tmpDist2)
)
(setq Pt (list (/ (+ (nth 0 VerPoints) (nth 4 VerPoints)) 2.0) (/ (+ (nth 1 VerPoints) (nth 5 VerPoints)) 2.0) 0.0))
(setq Str (strcat (rtos Len 2 2) "x" (rtos Wid 2 2)))
(setq tmpText (vla-AddText CurSpace Str (vlax-3d-point Pt) Ht))
(vla-put-Alignment tmpText 4)
(vla-put-TextAlignmentPoint tmpText (vlax-3d-point Pt))
)
)
(setq cnt (1+ cnt))
)



Bedankt
Cad_User86

julien

Wij zijn hier afgestapt om zaagplannen in AutoCAD te maken.
We gebruiken hiervoor het gratis:
http://www.maxcutsoftware.com
Die maakt naast optimalisaties ook zaagplannen waar je de naam van je onderdeel kan opzetten en ook de zaagmaten. Is dat iets voor jou?

gery

Cad_user86, met welke (versie van) AutoCAD werkt u?
AutoCAD 2020 - Windows 10

Cad_user86


gery

AutoCAD 2020 - Windows 10

Cad_user86


roy_043

@Cad_User86:
De code in de OP is niet compleet. Wellicht een copy-paste fout?
En: Gebruik a.u.b. CODE-tags.

Cad_user86

Dag Roy,

Ik ken zelf niets van LISP, gewoon van internet gekopieerd zoals het hier staat (site van autodesk)
Wat is "OP"? en wat zijn CODE-tags?

Bedankt! :vreegoe:

EddyBeerke

Citaat van: Cad_user86 op wo 19 10 2016, 15:22:07
Dag Roy,

Ik ken zelf niets van LISP, gewoon van internet gekopieerd zoals het hier staat (site van autodesk)
Wat is "OP"? en wat zijn CODE-tags?

Bedankt! :vreegoe:
Zie afbeelding...
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

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

gery

AutoCAD 2020 - Windows 10

gery

Als je bij de code in de OP op het einde 3 sluitende haken toevoegt, werkt het. Ziehier de volledige code:
(defun c:LabelRec (/ ActDoc CurSpace Ht ss cnt Ent EntData VerPoints tmpEnt Wid Len Pt Str tmpPt tmpText tmpDist1 tmpDist2)
; Label rectangles with length and width in middle of them.
(vl-load-com)
(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(if (= (getvar "cvport") 1)
(setq CurSpace (vla-get-PaperSpace ActDoc))
(setq CurSpace (vla-get-ModelSpace ActDoc))
)
(if (and (setq Ht (getreal "\n Enter height of text: ")) (setq ss (ssget '((0 . "*POLYLINE")))))
(progn
(setq cnt 0)
(while (setq Ent (ssname ss cnt))
(setq EntData (entget Ent))
(if (= (cdr (assoc 0 EntData)) "LWPOLYLINE")
(setq VerPoints (vlax-get (vlax-ename->vla-object Ent) 'Coordinates))
(progn
(setq VerPoints nil)
(setq tmpEnt (entnext Ent))
(while (not (equal (cdr (assoc 0 (entget tmpEnt))) "SEQEND"))
(setq tmpPt (cdr (assoc 10 (entget tmpEnt))))
(setq VerPoints (append VerPoints (list (car tmpPt))))
(setq VerPoints (append VerPoints (list (cadr tmpPt))))
(setq tmpEnt (entnext tmpEnt))
)
)
)
(if (= (length VerPoints) 8)
(progn
(setq tmpDist1 (distance (list (nth 0 VerPOints) (nth 1 VerPoints)) (list (nth 2 VerPoints) (nth 3 VerPoints))))
(setq tmpDist2 (distance (list (nth 2 VerPOints) (nth 3 VerPoints)) (list (nth 4 VerPoints) (nth 5 VerPoints))))
(if (< tmpDist1 tmpDist2)
(setq Len tmpDist2 Wid tmpDist1)
(setq Len tmpDist1 Wid tmpDist2)
)
(setq Pt (list (/ (+ (nth 0 VerPoints) (nth 4 VerPoints)) 2.0) (/ (+ (nth 1 VerPoints) (nth 5 VerPoints)) 2.0) 0.0))
(setq Str (strcat (rtos Len 2 2) "x" (rtos Wid 2 2)))
(setq tmpText (vla-AddText CurSpace Str (vlax-3d-point Pt) Ht))
(vla-put-Alignment tmpText 4)
(vla-put-TextAlignmentPoint tmpText (vlax-3d-point Pt))
)
)
(setq cnt (1+ cnt))
)
)
)
)
AutoCAD 2020 - Windows 10

roy_043

OP staat voor 'Original Post' of 'Original Poster'.

Cad_user86

Het werkt inderdaad.......  helaas nog niet meteen wat ik zoek :-)
Het uiteindelijke resultaat is hoe ik het graag zou hebben, maar ik zou willen dat, wanneer je een rechthoek tekent, dat de tekst dan automatisch in het midden komt te staan.

Nu moet je eerst de rechthoek tekenen, vervolgens de lisp activeren, hoogt tekst ingeven en vervolgens de rechthoek selecteren. Dit alles had ik graag in één beweging gedaan...
Iemand een voorstel?

Bedankt alvast!!! :vreegoe: :vreegoe: :vreegoe: :mrgreen:

gery

Dan zal je bovenstaande LISP code dienen uit te breiden met het RECTANG commando.
AutoCAD 2020 - Windows 10

Reimer

Zou je dit ook met een dynamisch block kunnen doen? Voorbeeld in de bijlage.

Reimer