All Activity
- Past hour
-
Please have a look at this, it makes a rectang then you can add the "TAB" to any side, even on an angle. The red points are the pick points working in a clock wise direction, if you pick wrong end the TAB will go inwards. I made a Block called " TAB" and used your dwg to set the edge distances. I did adjust the block ever so slightly it had like 33.70123 so set it to 33.7. here is also your dwg with the TAB block added. If your happy will add the Squares, again based on the rectang size. (defun c:wow ( / oldsnap pt1 pt2 pt3 pt4 ang tabwid) (setq oldsnap (getvar 'osmode)) (setq oldang (getvar 'aunits)) (setq ht 800.0 tabedge 41.0 tabwid 33.7) (setq pt1 (getpoint "\nPick 1st point ")) (setq len (getdist pt1 "\nPick 2nd point ")) (setq pt2 (mapcar '+ pt1 (list len 0.0 0.0)) pt3 (mapcar '+ pt1 (list len ht 0.0)) pt4 (mapcar '+ pt1 (list 0.0 ht 0.0)) ) (setvar 'osmode 0) (setvar 'aunits 3) (command "Line" pt1 pt2 pt3 pt4 "c") (while (setq ent (entsel "\nPick near start end - Enter to stop ")) (setq ept (cadr ent)) (setq ent (car ent)) (setq entg (entget ent)) (setq start (cdr (assoc 10 entg))) (setq end (cdr (assoc 11 entg))) (setq len2 (distance start end)) (setq d1 (distance ept start)) (setq d2 (distance ept end)) (if (> d1 d2) (progn (setq temp start) (setq start end) (setq end temp) ) ) (setq ang (angle start end)) (setq pt5 (polar start ang tabedge)) (setq pt6 (polar pt5 ang tabwid)) (command "break" ent pt5 pt6) (command "insert" "TAB" pt5 1 1 ang) (command "explode" (entlast)) (setq pt5 (polar start ang (- len2 tabwid tabedge ))) (setq pt6 (polar pt5 ang tabwid)) (command "break" ent pt5 pt6) (command "insert" "TAB" pt5 1 1 ang) (command "explode" (entlast)) ) (setq pt3 (mapcar '+ pt3 (list 40 40 0.0))) (setq pt1 (mapcar '+ pt1 (list -40 -40 0.0))) (command "join" "w" pt3 pt1 "") (setvar 'osmode oldsnap) (setvar 'aunits oldang) (princ) ) (c:wow) The array does have a pattern so your multi if's could become as simple, as (fix (- (/ length 75) 1)) just try it. Vertical rows is 9 for 800. (setq col (fix (- (/ 1220.234 75) 1))) (setq bname (strcat "*Infil_sq_" (rtos col 2 0))) Is the length overall or the distance between the centre points of the slots. Can fix length to match. Need you to confirm what this length is based on. Infil Panels AutoLisp Test-TAB.dwg
- Today
-
I still think much easier to just select a line or pline near an end, then draw the tab based on some sort of sizes criteria, after doing the code i realised only really need one draw tab portion so can be on any segment and a bonus at any angle of the selected P/Line. The tab would be drawn and a simple flip to set it to inside or outside. You can pick say 4 times very fast. Even shapes would work. Why not just have the tab as a block, much easier to work with. Will have a think about it. Oh yeah I think the infill can be done as an array rather than having lots of blocks. Found your post over at forums/autodesk as well.
-
Attributes be added to factor the outcome of Incremental numbers
BIGAL replied to u4ea2u2's topic in AutoLISP, Visual LISP & DCL
You should remove your other post. It is confusing to have two posts. I sorted all the blocks in that dwg. Still not sure your criteria for changing which attribute value. (("DATAPORT NUMBER" "APPLE" "" "1200" "1" "") ("DATAPORT NUMBER" "Box" "" "1250" "" "") ("DATAPORT NUMBER" "Box" "" "1250" "" "") ("DATAPORT NUMBER" "CHERRY" "" "1200" "001" "Yesterday") ("DATAPORT NUMBER" "Cheeze" "" "1800.9" "1" "Now") ("DATAPORT NUMBER" "Chocolates" "" "1350" "" "") ("DATAPORT NUMBER" "DD3" "" "1000" "001" "") ("DATAPORT NUMBER" "Milk" "" "1700" "1" "Never") ("DATAPORT NUMBER" "Milk" "" "1700" "1" "Never") ("DATAPORT NUMBER" "PEACH" "" "1200" "001" "Tomorrow") ("DATAPORT NUMBER" "PEACH" "" "1200" "001" "Tomorrow") ("DATAPORT NUMBER" "PEAR" "" "1200" "001" "Tomorrow") ("DATAPORT NUMBER" "PIE" "" "1100" "003" "") ("DATAPORT NUMBER" "PIE" "" "1100" "003" "") ("DATAPORT NUMBER" "Picles" "" "1400" "" "") ("DATAPORT NUMBER" "Yogurt" "" "1800.9" "2" "")) -
I posted elsewhere about sorting attributes say up to 5 attributes deep and a list Is made, the next step is the list is counted so the same block attributes have a count added. Eg (002 1100 001 3) so 3 the same exists. Your other post ? So in your data you have say 2 x Box, milk, peach and so on. So what do you do to fix ? (("DATAPORT NUMBER" "APPLE" "" "1200" "1" "") ("DATAPORT NUMBER" "Box" "" "1250" "" "") ("DATAPORT NUMBER" "Box" "" "1250" "" "") ("DATAPORT NUMBER" "CHERRY" "" "1200" "001" "Yesterday") ("DATAPORT NUMBER" "Cheeze" "" "1800.9" "1" "Now") ("DATAPORT NUMBER" "Chocolates" "" "1350" "" "") ("DATAPORT NUMBER" "DD3" "" "1000" "001" "") ("DATAPORT NUMBER" "Milk" "" "1700" "1" "Never") ("DATAPORT NUMBER" "Milk" "" "1700" "1" "Never") ("DATAPORT NUMBER" "PEACH" "" "1200" "001" "Tomorrow") ("DATAPORT NUMBER" "PEACH" "" "1200" "001" "Tomorrow") ("DATAPORT NUMBER" "PEAR" "" "1200" "001" "Tomorrow") ("DATAPORT NUMBER" "PIE" "" "1100" "003" "") ("DATAPORT NUMBER" "PIE" "" "1100" "003" "") ("DATAPORT NUMBER" "Picles" "" "1400" "" "") ("DATAPORT NUMBER" "Yogurt" "" "1800.9" "2" ""))
-
Thank you for your advice
-
Thank you very much. That works perfectly
-
You can null these 2 defuns
- Yesterday
-
Break an object at 2 points and replace the properties of the line
GLAVCVS replied to Nikon's topic in AutoLISP, Visual LISP & DCL
The user can always activate the object snapping option using F3. The reason I left this option is in case the user ever needs to reference the geometry of other nearby objects. -
devitg started following Autocad join command and Break an object at 2 points and replace the properties of the line
-
Break an object at 2 points and replace the properties of the line
devitg replied to Nikon's topic in AutoLISP, Visual LISP & DCL
Why not use (setvar 'osmode 512) ; as per NEAREST (setq pt1 (getpoint "\nSelect the first break point: ") ;; Entering the first break point pt2 (getpoint "\nSelect the second break point: ") ;; Entering the second break point ep nil ) So point will be at select entity and not need to get the closestpoint (setq pt1 (vlax-curve-getClosestPointTo (vlax-ename->vla-object ent) pt1) pt2 (vlax-curve-getClosestPointTo (vlax-ename->vla-object ent) pt2) ) -
use this PEDIT WAY (command "._PEDIT" topline "_J" "all" "" "" ) ;topline infilHL bottomline infilHR "" "_j" "" "")
-
Please upload this defun (savevartoold) (infilpanellayer)
-
Read up on cond. better way to test/decide what block to insert. (cond ((and (>= dist1 145) (< dist1 220)) (command "-insert" "*Infil_sq_1" p7 "" "" "") ) ((and (>= dist1 220) (< dist1 295)) (command "-insert" "*Infil_sq_2" p7 "" "" "") ) ((and (>= dist1 295) (< dist1 370)) (command "-insert" "*Infil_sq_3" p7 "" "" "") ) ... ((and(>= dist1 1195) (< dist1 1270)) (command "-insert" "*Infil_sq_15" p7 "" "" "") ) (T ;if all other condtions fail (alert "\nDistance Greater than 1270") ) )
-
Hi All. This time I have included my files to give you a better idea of what i'm trying to acheive Thanks for the ideas. I have used the PEDIT approach and it has almost worked. It joins 3 of the entities but not the 4th. The program runs right through. Any ideas why the 4th entity won't join?? Ive included my DWG file for you to have a look and also my lisp routine. The bulk of the routine works well its just the join command Regards tony Horozontal Infil.lsp Infil Panels AutoLisp Test.dwg
-
u4ea2u2 started following sorting by block attributes and Attributes be added to factor the outcome of Incremental numbers
-
Attributes be added to factor the outcome of Incremental numbers
u4ea2u2 replied to u4ea2u2's topic in AutoLISP, Visual LISP & DCL
I got to thinking.. if blocks represent parts and multiple similar Parts exists the same assigned number should be same for similar parts. So after adding Part_Number attribute could the lisp runs the below results? (graphically like column order in a table, but the way the order lisp sorts). I see issues if Part_Number and other Sort Orders values don't match when hoping for blocks with same part number to be assigned same Dataport Number. So there would need to be a warning if that occurs. Hope this makes sense. DATAPORT_NUMBER --> order by--> | Sort_Order | Sort_Order2 | Sort_Order3 | <--Part_Number "001" --> "1000" "001" "" <-- "DD3" "002" -->"1100" "003" "" <-- "PIE" "002" -->"1100" "003" "" <-- "PIE" "003" -->"1200" "1" "" <-- "APPLE" "004" -->"1200" "001" "Tomorrow" <--"PEAR" "005" --> "1200" "001" "Tomorrow"<--"PEACH" "005" -->"1200" "001" "Tomorrow" <--"PEACH" "006" -->"1200" "001" "Yesterday" <--"CHERRY" "007" -->"1250" "" "" <--Box "007" -->"1250" "" "" <--Box "008"-->"1350" "" "" <- Chocolates "009" -->"1400" "" "" <--Pickles etc PNO TEST-LSP FOR NUMBING3.dwg -
I got to thinking.. if blocks represent parts and multiple similar Parts exists the same assigned number should be same for similar parts. So after adding Part_Number attribute could the lisp runs the below results? (graphically like column order in a table, but the way the order lisp sorts). I see issues if Part_Number and other Sort Orders values don't match when hoping for blocks with same part number to be assigned same Dataport Number. So there would need to be a warning if that occurs. Hope this makes sense. DATAPORT_NUMBER --> order by--> | Sort_Order | Sort_Order2 | Sort_Order3 | <--Part_Number "001" --> "1000" "001" "" <-- "DD3" "002" -->"1100" "003" "" <-- "PIE" "002" -->"1100" "003" "" <-- "PIE" "003" -->"1200" "1" "" <-- "APPLE" "004" -->"1200" "001" "Tomorrow" <--"PEAR" "005" --> "1200" "001" "Tomorrow"<--"PEACH" "005" -->"1200" "001" "Tomorrow" <--"PEACH" "006" -->"1200" "001" "Yesterday" <--"CHERRY" "007" -->"1250" "" "" <--Box "007" -->"1250" "" "" <--Box "008"-->"1350" "" "" <- Chocolates "009" -->"1400" "" "" <--Pickles etc PNO TEST-LSP FOR NUMBING3.dwg
-
Attributes be added to factor the outcome of Incremental numbers
SLW210 replied to u4ea2u2's topic in AutoLISP, Visual LISP & DCL
I created a new post for this topic. Attributes be added to factor the outcome of Incremental numbers. -
Break an object at 2 points and replace the properties of the line
Nikon replied to Nikon's topic in AutoLISP, Visual LISP & DCL
@GLAVCVS Thank you very much, as always, you are very attentive to details. It is very convenient that the functions work in a loop and a dashed line is created immediately. "But in the end, I decided to spend a little time improving the code". The code has been improved by 100 percent! -
Attributes be added to factor the outcome of Incremental numbers
u4ea2u2 replied to u4ea2u2's topic in AutoLISP, Visual LISP & DCL
Yes.. the layout you show is what I was thinking of. Attached here is the PNO lisp from earlier in this thread that I was hoping could be altered to do that. Thanks pno.LSP - Last week
-
Attributes be added to factor the outcome of Incremental numbers
u4ea2u2 replied to u4ea2u2's topic in AutoLISP, Visual LISP & DCL
Thanks Bigal for looking into this. The goal is to have incremental number input into Attribute "Port_Number" based on level of priority..Sort_Order then Sort_Order2 then Sort_order3. The first and second attributes would always have a value, but the third attribute may at time be empty. Ideally when many blocks that share the same values in the 1st 2 attributes, the lisp looks to the 3rd for direction for the next incremental number assignment. -
Attributes be added to factor the outcome of Incremental numbers
BIGAL replied to u4ea2u2's topic in AutoLISP, Visual LISP & DCL
To Admin this is really a new task, as its the posters first post. Does not match this post. You can sort multiple attributes in a order of attributes. I have some thing that works for up to 5 attributes deep. It pads missing attrbute values, so can have say 1 or up to 4 attribute values. I need some time to have a look at say add a "002" block and find highest attribute value of existing blocks. ("DATAPORT NUMBER" "001" "1000" "001" "") ("DATAPORT NUMBER" "002" "1200" "002" "") ("DATAPORT NUMBER" "002" "1200" "002" "Tomorrow") ("DATAPORT NUMBER" "002" "1200" "002" "Yesterday") ("DATAPORT NUMBER" "003" "1200" "001" "") ("DATAPORT NUMBER" "004" "1350" "" "") ("DATAPORT NUMBER" "005" "1400" "" "") ("DATAPORT NUMBER" "006" "1500" "" "") ("DATAPORT NUMBER" "007" "1600" "" "") ("DATAPORT NUMBER" "008" "1700" "" "") ("DATAPORT NUMBER" "009" "1800.9" "" "") ("DATAPORT NUMBER" "010" "1900" "" "")) -
Break an object at 2 points and replace the properties of the line
GLAVCVS replied to Nikon's topic in AutoLISP, Visual LISP & DCL
Another important detail: in the circles, the resulting arc that will be modified depends on whether the cut points are indicated in a clockwise or counterclockwise direction. If they are selected in the opposite direction from what is needed to obtain the desired result, it can be immediately switched by pressing TAB key (as indicated in the command line). -
Break an object at 2 points and replace the properties of the line
GLAVCVS replied to Nikon's topic in AutoLISP, Visual LISP & DCL
I think I read your first explanation too quickly. I also thought about keeping the main part of your code to avoid overcomplicating my answer. But in the end, I decided to spend a little time improving the code. Here's another option for doing this task. One possible difference (or not) with the other options discussed in this thread is that the cut points may or may not be on the object to be cut: when they aren't, it will calculate the perpendicular point. Another small difference is that here, you're still required to first select the object to be modified to avoid the problem of cases where several objects coincide at the same point. (defun c:Br2ptReplDash (/ para tl ss pt1 pt2 p1 p2 ent vlae ep to c r eumk entdata newent entUlt osmant ecoA lstChg lstR lent1 lent pIni pFin dameSeg *troca* erroria errores error0 ) (defun erroria () (defun errores (mens) (setq *error* error0) (command-s "._undo" "_1") (prin1) ) (setq error0 *error* *error* errores ) ) (defun dameSeg (e p1 p2 / vlae pIni pFin rg) (setq pIni (vlax-curve-getPointatParam (setq vlae (vlax-ename->vla-object e)) (vlax-curve-getStartParam vlae)) pFin (vlax-curve-getPointatParam vlae (vlax-curve-getEndParam vlae)) rg (* (getvar "PICKBOX") (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))) 1.01) ) (if (and (or (equal p1 pIni rg) (equal p1 pFin rg) ) (or (equal p2 pIni rg) (equal p2 pFin rg) ) ) T ) ) (defun grreadea (/ para lr ) (while (not para) (princ "\rPress TAB to switch modifications, Select next object to split or RIGHT CLICK to EXIT...") (setq lr (grread T 4 2)) (cond ((= (car lr) 2) (cond ((= (cadr lr) 9) (setq *troca* (not *troca*)) (entmod (append (if *troca* lent lent1) lstChg)) (entmod (append (if *troca* lent1 lent) lstR)) ) ) ) ((= (car lr) 25) (setq para 0 ep nil) ) ((= (car lr) 3) (if (listp (cadr lr)) (setq ep (nentselp (cadr lr)) ep (if (wcmatch (cdr (assoc 0 (entget (car ep)))) "*LINE,ARC,CIRCLE") ep) para (if ep T) ) ) ) (T (if (/= (car lr) 5) (print lr) )) ) ) para ) (erroria) (setq osmant (getvar "OSMODE") ecoA (getvar "CMDECHO") eumk nil tl "DASHED2" tl (if (tblsearch "LTYPE" tl) tl (progn (vlr-beep-reaction) (alert (princ (strcat "\n*** Linetype " tl " not found. It will be instead CONTINUOUS"))) "CONTINUOUS" ) ) lstChg (list '(8 . "0") ; the default layer (cons 6 tl) ; line type '(48 . 0.25) ; thickness '(62 . 84) ; color ) ) (setvar "CMDECHO" 0) (while (and (not para) (or ep (setq ss (SETVAR "NOMUTT" 1) ss (princ "\nSelect object to trim (RIGH CLICK to EXIT)...") ss (ssget "_+.:E:S" '((0 . "*LINE,POLYLINE,CIRCLE,ARC"))) ) ) ) (SETVAR "NOMUTT" 0) (setq entUlt (entlast)) (princ "\nSelect the object to split...") (setq ent (if ep (car ep) (ssname ss 0)) lstR (list (cons 6 (if (assoc 6 (entget ent)) (cdr (assoc 6 (entget ent))) "BYLAYER")) (cons 48 (if (assoc 48 (entget ent)) (cdr (assoc 48 (entget ent))) 1.0)) (cons 62 (if (assoc 62 (entget ent)) (cdr (assoc 62 (entget ent))) 256)) ) ) (setq pt1 (getpoint "\nSelect the first break point: ") ;; Entering the first break point pt2 (getpoint "\nSelect the second break point: ") ;; Entering the second break point ep nil ) (vla-startUndomark (vla-get-activeDocument (vlax-get-acad-object))) ;; Checking the object type and performing the split (cond ((wcmatch (setq to (cdr (assoc 0 (entget ent)))) "*LINE") ;; break polyline (setq pt1 (vlax-curve-getClosestPointTo (vlax-ename->vla-object ent) pt1) pt2 (vlax-curve-getClosestPointTo (vlax-ename->vla-object ent) pt2) ) (command "_.BREAK" ent pt1 pt2) (command "_.LINE" pt1 pt2 "") (entmod (append (ENTGET (ENTLAST)) lstChg)) ) ((= to "CIRCLE") ;; break the circle (setvar "OSMODE" 0) (entmake (entget ent)) (command "_.BREAK" ent pt1 pt2) (command "_.BREAK" (entlast) pt2 pt1) (setq lent (entget ent)) (entmod (append (setq lent1 (entget (entlast))) lstChg)) (setq para (= 0 (grreadea))) ) ((= to "ARC") ;; break the arc (setvar "OSMODE" 0) (setq ;ent1 (entmake (entget ent)) pIni (vlax-curve-getPointatParam (setq vlae (vlax-ename->vla-object ent)) (vlax-curve-getStartParam vlae)) pFin (vlax-curve-getPointatParam vlae (vlax-curve-getEndParam vlae)) pt1 (polar (setq c (cdr (assoc 10 (setq lent (entget ent))))) (angle c pt1) (setq r (cdr (assoc 40 lent)))) pt2 (polar c (angle c pt2) r) ) (command "_.BREAK" ent pt1 pt1) (if (equal (car (nentselp pt2)) (setq ent1 (entlast))); SI P2 EST脕 SOBRE LA NUEVA ENTIDAD CREADA (command "_.BREAK" ent1 pt2 pt2) (command "_.BREAK" ent pt2 pt2) ) (entmod (append (entget (if (dameSeg (setq ent2 (entlast)) pt1 pt2) ent2 ent1)) lstChg)) ) (T (prompt "An object of an unsupported type.") ) ) (vla-EndUndomark (vla-get-activeDocument (vlax-get-acad-object))) (setq eumk T) (setvar "OSMODE" OSMANT) ) (if ecoA (setvar "CMDECHO" ecoA)) (if (not entUlt) (princ "\nObjects are not selected.")) (princ) ) -
Is there any lisp to connect to selected block or point by a line offset from a selected layer
Hassan95 replied to Elektrik's topic in AutoLISP, Visual LISP & DCL
thanks. -
Attributes be added to factor the outcome of Incremental numbers
u4ea2u2 posted a topic in AutoLISP, Visual LISP & DCL
RE: PNO lisp: Can additional attributes be added to factor the outcome of Incremental numbers? When I review the PNO lisp I keep wondering, can the results of assigned incremental number in "Port_Number" attribute be secondarily ordered by a 2nd attribute "Sort_Order2" value after the 1st "Sort-Order" value? AND possibly by 3rd priority sort of 3rd attribute's alphabetic value in a 3rd attribute "Sort_Order3"? These option, if possible, would allow more control of the assigned incremental numbers. Attached is blocks as example. PNO TEST-LSP FOR NUMBING2.dwg -
Need a LISP to Create an Outer Contour from Selected Objects
SLW210 replied to p7q's topic in AutoLISP, Visual LISP & DCL
There are some LISPs/programs out there. AutoCAD Architecture FREE toolset has the AECLINEWORKSHRINKWRAP command. Or... Polyline Outline (Advanced) | Lee Mac Programming. Maybe this... TotalBoundary • Outline creation tool - Programs and Scripts - AutoCAD Forums Maybe something in this thread...