Abrasive Posted December 22, 2022 Author Share Posted December 22, 2022 6 hours ago, mhupp said: Draftsight says it can use visual lisp Give this a test on two objects that are overlapping. should look something like this. : test Select Object #<VLA-OBJECT IAcadCircle 0000000034136D70> Select Object #<VLA-OBJECT IAcadLWPolyline 0000000034138670> (38.4875958273987 6.35534521426045 0.0 59.4778766221801 -15.5266360848402 0.0) (defun C:test (/ obj1 obj2 pts-lst) (vl-load-com) (setq obj1 (vlax-ename->vla-object (car (entsel "\nSelect Object")))) (princ "\n") (princ obj1) (setq obj2 (vlax-ename->vla-object (car (entsel "\nSelect Object")))) (princ "\n") (princ obj2) (setq pts-lst (vlax-safearray->list (vlax-variant-value (vla-intersectwith obj1 obj2 acextendnone)))) (princ "\n") (princ pts-lst) (princ) ) RESULT: : TEST Select Object» 1 found "(null): (null)" nil I don't know enough about what's going on to help... Quote Link to comment Share on other sites More sharing options...
Abrasive Posted December 22, 2022 Author Share Posted December 22, 2022 (defun C:test (/ obj1 obj2 pts-lst) (vl-load-com) ;(setq obj1 (vlax-ename->vla-object (car (entsel "\nSelect Object")))) (setq obj1 (entget (car (entsel "\nSelect Object")))) (princ "\n") (princ obj1) ;(setq obj2 (vlax-ename->vla-object (car (entsel "\nSelect Object")))) (setq obj2 (entget (car (entsel "\nSelect Object")))) (princ "\n") (princ obj2) (setq pts-lst (vlax-safearray->list (vlax-variant-value (vla-intersectwith obj1 obj2 acextendnone)))) (princ "\n") (princ pts-lst) (princ) ) Changed code to above and get this result: (Got the lines of code from AFRALISP:) https://www.afralisp.net/autolisp/tutorials/extended-entity-data-part-1.php Select Object» 1 found ((-1 . <EName: 0000015bf68ef220>) (0 . CIRCLE) (5 . 12C) (330 . <EName: 0000015ba76ac600>) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 0) (100 . AcDbCircle) (10 1122.8891695 -983.61616472 0.0) (40 . 737.83879731) (210 0.0 0.0 1.0)) Select Object» 1 found ((-1 . <EName: 0000015bf54fadd0>) (0 . LWPOLYLINE) (5 . 12A) (330 . <EName: 0000015ba76ac600>) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 0) (100 . AcDbPolyline) (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 140.79935327 858.08230436 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 140.79935327 -817.81849232 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 290.1666257 -817.81849232 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 290.1666257 858.08230436 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0)) Error: Invalid parameter. Quote Link to comment Share on other sites More sharing options...
mhupp Posted December 22, 2022 Share Posted December 22, 2022 Unfortunately you need the vla-object name to work with the intersectwith function. That's what vlax-ename->vla-object is doing its converting the entity name into vla-object. According to the website only version 2021 and up have that function. https://help.solidworks.com/2023/English/api/draftsightlispreference/vlisp/vl_vlax_functions.htm?verRedirect=1 Maybe their is some other way to calculate interesting points but i don't know how. and with out those points I can't break/trim objects around another one. Quote Link to comment Share on other sites More sharing options...
Abrasive Posted December 22, 2022 Author Share Posted December 22, 2022 3 minutes ago, mhupp said: Unfortunately you need the vla-object name to work with the intersectwith function. That's what vlax-ename->vla-object is doing its converting the entity name into vla-object. According to the website only version 2021 and up have that function. https://help.solidworks.com/2023/English/api/draftsightlispreference/vlisp/vl_vlax_functions.htm?verRedirect=1 Maybe their is some other way to calculate interesting points but i don't know how. and with out those points I can't break/trim objects around another one. @mhupp Thank you so much for your time! I have an idea that might work... I'll try to explain. If I can select the rectangle and offset its points to the inside by a small number say .001. Then use those values to create a list of points. In the routine, start the Trim command and fill the values for a fence using the new inside offsets then have the routine finalize the trim command? (defun c:TBEAM (/ ) ;SELECT A RECTANGLE.... (setq RectList1 (entget (car (entsel)))) ;OFFSET ITS POINTS TO THE INSIDE BY .001..... ;RectList2 = RectList1 - .001 ;RUN THIS COMMAND....... (command "_TRIM" "" "_F" pause pause pause) ; AFTER THE "_F" FILL THE FENCE WITH RectList2 AND FINISH ) Quote Link to comment Share on other sites More sharing options...
BIGAL Posted December 22, 2022 Share Posted December 22, 2022 (edited) You are correct you can select a closed pline you make that the trim line you then offset that inwards a small amount that makes your trim line. Then do a ssget "WP" to erase objects inside. This has no VL (defun c:wow ( / oldsnap ent co-ord co-ord2 pt ) (setq oldsnap (getvar 'osmode)) (setq ent (entsel "\nPick rectang ")) (setvar 'osmode 0) (setq pt (getpoint "\nPick point inside ")) (command "offset" "0.5" ent pt "") (setq co-ord (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (car ent))))) (setq co-ord2 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (entlast))))) (setq co-ord2 (cons (last co-ord2) co-ord2)) (command "erase" (entlast) "") (setq pt (car co-ord)) (command "trim" pt "" "F" co-ord2 "" "") (command "erase" (ssget "WP" co-ord2) "") (setvar 'osmode oldsnap) (princ) ) (c:wow) Can be modified for multi select but test 1st. Edited December 22, 2022 by BIGAL 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.