motee-z Posted December 17, 2011 Posted December 17, 2011 hi friends i have a program ezysurf this program can draw a cross section or profile by drawing a line on a surface this surface consist of a 3d face for every three points and the 3d face lied on a specific layer the question is can any body help how we can get the list(x y z) of intersection points between this line and the edge of every 3d face in addition to start and end point of this line thanks Quote
BIGAL Posted December 19, 2011 Posted December 19, 2011 Can be done you need to create new lines representing the faces say on another layer then you draw your line and do a "intersect" for every line it crosses giving the point required. this is just a start but is in right direction need a 3dface to lines to test explode all 3dfaces. relevant bits cut out of Auto dimensioning routine (setq ss (ssget "F" (list pt1 pt2))) ;your line (while (setq en (ssname ss 0)) ;loop trhough 3dface lines (setq dimpt1 (cdr (assoc 10 (entget en)))) (setq dimpt2 (cdr (assoc 11 (entget en)))) (setq newpt2 (inters pt1 pt2 dimpt1 dimpt2 nil)) Quote
motee-z Posted December 19, 2011 Author Posted December 19, 2011 thanks BIGAL to reply but i think it is difficult to explode 3d faces to lines i know the lisp is very complicated but someone expert can do it Quote
Stefan BMR Posted December 19, 2011 Posted December 19, 2011 Hi motee-z You don't need a lisp for this job. Section command works well on surfaces to. In order to do that, you have to transform your 3dFaces to Surface. I don't use ribbon, but in classic Acad you can do that via Modify->Mesh Editing->Convert to Faceted Surface (or Convert to Smooth Surface, same result for 3DFace); then Union (like for solids) and finally Section... just like for regular Solids. Quote
motee-z Posted December 19, 2011 Author Posted December 19, 2011 thanks stefan my aim is to build a lisp for profiles and cross section so i want the begining and i think some one expert can help me Quote
BIGAL Posted December 20, 2011 Posted December 20, 2011 Thanks Stefan for the answer for something else I was trying to do, re the post the section whilst it slices will not return the x.y.z values where they slice the surface which was the original request. heres the code for pulling the xyz of 3dfaces out use pt1 pt2 pt3 as the 3 sides of a triangle (setq ss (ssget "X" '((0 . "3DFACE")))) (setq y (sslength ss)) (If (= ss nil) (progn (Getstring "\nNo 3d faces . Press any key when ready ") (exit) ) ) (setq y (sslength ss)) (repeat y (setq en (ssname ss x) ed (entget en) p1 (cdr (assoc 10 ed)) p2 (cdr (assoc 11 ed)) p3 (cdr (assoc 12 ed)) p4 (cdr (assoc 13 ed)) ; p4 not required ) ) Quote
motee-z Posted December 21, 2011 Author Posted December 21, 2011 thanks BIGAL what is the aim of getting the list of 3d face head you think can be connected with lines on other hand the variable ed gives nill Quote
BIGAL Posted December 22, 2011 Posted December 22, 2011 Didn't test code just cut and pasted from elsewhere needs a X value or use Foreach not tested but should work (setq x 0) (setq x (+ x 1)) (setq ss (ssget "X" '((0 . "3DFACE")))) (setq y (sslength ss)) (If (= ss nil) (progn (Getstring "\nNo 3d faces . Press any key when ready ") (exit) ) ) (setq y (sslength ss)) (repeat y (setq en (ssname ss x) ed (entget en) p1 (cdr (assoc 10 ed)) p2 (cdr (assoc 11 ed)) p3 (cdr (assoc 12 ed)) p4 (cdr (assoc 13 ed)) ; p4 not required ) (princ p1) ; for testing (setq x (+ x 1)) ) Quote
motee-z Posted December 26, 2011 Author Posted December 26, 2011 what is the command that can get the apparent intersection between 2 line one of them is has different z we know if the 2 line are 2d the code is (inters p1 p2 p3 p4) thanks Quote
GP_ Posted December 27, 2011 Posted December 27, 2011 @motee-z See if you take a cue from this (bad) English version of my lisp. Description: selecting a line/polyline2D/polyline3D that intersects a surface consisting of triangular 3DFACE, generates a polyline3D (profile) on the model. PROF_3DF_EN.LSP Quote
motee-z Posted December 27, 2011 Author Posted December 27, 2011 thank you GP_ i think there is no similar lisp on the net it is a great lisp i ,ll try to understand it Quote
GP_ Posted December 28, 2011 Posted December 28, 2011 You're welcome. I hope that the lisp can be helpful, although it can be improved in some parts. Quote
GP_ Posted January 7, 2012 Posted January 7, 2012 I respond publicly to a request for explanation on Lisp received at the private message as it may interest to other users. _______________________________________________________ Intersection section line/3DFACE Repeat for the three sides of the triangle (3DFACE) pA pB -> points of the section line p1 p2 -> vertices side of the triangle p1a p2a -> vertices p1 and p2 to altitude 0,00 p3 -> intersection of pA,pB/p1a,p2a if p3 -> p4 p5 -> points on the vertical p3 p6a -> intersection point (in top view) section line/3DFACE ________________________________________________ Point in the plane of 3DFACE Use: Help AutoCAD This is the use in lisp posted: (cal "pINT_z=ilp(p_INT_inf,p_INT_sup,p1,p2,p3)") Note: remember to load the geometry calculator: (if (not (member "geomcal.arx" (arx))) (arxload "geomcal")) :) Quote
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.